2013-10-10 2 views
0

소켓 프로그래밍에 익숙합니다.이 질문이 기본이라면 용서해주십시오. 나는 어디에서나 답을 찾을 수 없었다.소켓 UDP 하나의 소켓, 다른 포트

새 소켓이 필요한 것은 무엇입니까?

예를 들어 동일한 포트에서 동일한 소켓 fd로 보내고받을 수 있습니다. 하나의 소켓으로 XXXX 포트로 보내고 YYYY 포트에서 수신 할 수 있습니까? 그렇지 않다면 호스트/포트 조합에 특정한 소켓이 있습니까?

통찰력을 가져 주셔서 감사합니다!

예, 하나의 소켓이 하나의 호스트/포트 조합에 고유 :

답변

2

이 소켓은 IP 주소와 포트로 구성된 "엔드 포인트"를 설정합니다.

독서 권장 사항 :

네트워크 프로그래밍 Beej의 가이드 :

유닉스 네트워크 프로그래밍 : 스티븐스 등 :

+0

예 : 한 소켓에서 하나의 소켓이 송수신된다. 다른 소켓이 다른 포트에서 보내고받을 수 있습니다. 클라이언트는 '잘 알려진'포트 (예 : http의 경우 '80')에 연결합니다. 연결이 설정되면 [임시 포트] (http://en.wikipedia.org/wiki/Ephemeral_port)에서 통신이 이루어집니다. – paulsm4

1

포트 번호는 로컬 속성이며 수신자 컴퓨터에서 해당 포트로 보내지는 수신 데이터의 소켓 끝점을 식별하는 데 도움이됩니다. 각 시스템에는 각 프로토콜 유형 (TCP 또는 UDP) 및 각 패밀리 유형 (IPv4 또는 IPv6)에 대해 64K 포트가 있습니다.

UDP를 사용하면 다른 포트에있는 많은 클라이언트로 보내고받을 수 있습니다. 그래서, 다음과 같은 연결 : 따라서

UDP_socketA (port p1) <---------> UDP socketB (port p2) 
    | 
    | 
    | 
    | 
UDP socketC (port p3) 

, socketA은 다른 포트 번호에 앉아있다하더라도 socketB 및 socketC에 datat을 보낼 수 있습니다. 그것이 작동하는 방식은 UDP 소켓을 사용하여 일반적으로 각 패킷에 대해 IP 주소와 포트 번호를 지정할 수있는 sendto() API를 사용한다는 것입니다. 따라서 우리는 하나의 패킷을 포트 B로 보내고 다음 패킷은 포트 C로 보낼 수 있습니다.

그러나 TCP의 경우에는 그렇지 않습니다. 일단 연결이 설정되면 socketA와 socketB 사이에 아무 말도하지 말자.이 소켓 중 어느 하나가 socketC와 통신 할 수있다.

TCP_socketA (port p1) <---------> TCP socket B (port p2) 
     | 
     | 
     | 
     | 
    TCP socketC (port p3)