2012-02-12 74 views
0

我已收到来自UDP套接字fd的数据。如何使用此信息来建立发件人的TCP连接。 buf包含TCP端口。如何使用UDP段中的数据建立TCP连接?

struct sockaddr_storage remote_addr; 
socklen_t remote_addr_len; 

recvfrom(fd, buf, BUFSIZE, 0, (struct sockaddr *)&remote_addr, &remote_addr_len); 

下面的代码是我的尝试,但它不起作用。我是套接字编程的新手,我正在试图弄清楚这个问题。

newfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
struct hostent *info; 
info = gethostbyname(remoteAddr.h_addr); 

struct sockaddr_in newConn; 
newConn.sin_family = AF_INET; 
bcopy((char *)info->h_addr, (char *)&newConn.sin_addr.s_addr, info->h_length); 
newConn.sin_port = htons(mesgTcpPort); //mesgTcpPort is of type int gotten from buf 


connect(newfd,(struct sockaddr *)&newConn,sizeof newConn); 

错误检查被省略。

+1

如果你添加错误检查,你会得到什么错误? (如果你没有得到任何代码,你的代码就可以工作。) – 2012-02-12 20:44:06

+0

我在实际的代码中检查错误,我只是在这里删除它来保持代码简短。 – user1205604 2012-02-12 20:49:04

回答

0

您不应该需要gethostbyname,因为UDP数据包的标头中包含一个IP地址(不是名称)(并由recvfrom给出)。

但是,这种方法的适用性有限,因为新连接不会穿越NAT,因为它不会与原始UDP连接关联,因为协议和端口不同。