2012-02-12 5 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

오류 검사를 추가하면 어떤 오류가 발생합니까? (아무 것도 얻지 못했다면 코드가 작동 할 것입니다.) –

+0

실제 코드를 확인하는 중에 오류가 있습니다. 코드를 짧게 유지하기 위해 여기에서 코드를 제거했습니다. – user1205604

답변

0

UDP 패킷의 헤더에 이름이 아닌 IP 주소 (recvfrom)가 포함되어 있기 때문에 gethostbyname은 필요하지 않습니다.

그러나 프로토콜과 포트가 다르기 때문에 새 연결은 원래의 UDP 연결과 연결되지 않으므로 NAT를 통과하지 않으므로이 방법은 적용이 제한적입니다.

관련 문제