Как использовать данные из сегмента UDP для установления TCP-соединений? - PullRequest
0 голосов
/ 13 февраля 2012

Я получил данные от сокета UDP fd. Как я могу использовать эту информацию для установления TCP-соединения от отправителя. buf содержит порт 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 Ответ

0 голосов
/ 13 февраля 2012

Вам не нужно gethostbyname, поскольку пакет UDP содержит в своем заголовке IP-адрес, а не имя (и передается вам recvfrom).

Однако этот подход имеет ограниченную применимость, поскольку новое соединение не будет проходить через NAT, поскольку оно не будет связано с исходным соединением UDP, поскольку протокол и порт различаются.

...