2013-07-24 2 views
3

리눅스 C 프로그램에서 239.1.2.3:20000의 데이터와 239.4.5.6:20001의 데이터를 수신한다고 가정 해보십시오. 하나의 소켓으로도 그렇게 할 수 있습니까?리눅스의 동일한 소켓에있는 다른 그룹의 멀티 캐스트 데이터 수신

은 내가 IP_ADD_MEMBERSHIP의 setsockopt를 옵션을 사용하여 소켓에서 여러 그룹을 당연히 가입 할 수 있지만 포트가 다르기 때문에, 나는 그것이

덕분에 어떻게 든 "두 포트에 바인딩"할 수 있다면 확실하지 않다.

답변

4

아니요 소켓을 2 개의 포트에 바인딩 할 수 없으면 포트 당 소켓이 필요합니다.

0

TCP의 경우 클라이언트 당 하나의 소켓이 있어야합니다. 소켓에 "받아 들여지는"연결이 있어야하기 때문입니다. 이 작업은 서버의 수신 소켓에서 accept를 호출하여 수행되며 특정 클라이언트 - 서버 연결을 나타내는 새 소켓 (새 포트 포함)을 반환합니다.

UDP에서는 "연결"이 없지만 데이터를 소켓으로 보내고 거기에 도착하기를 기대합니다 (그렇지 않을 수도 있음). UDP 소켓을 사용하면 모든 클라이언트가 데이터를 보낼 수 있으며 서버는 들어오는 연결에서 수락을 호출 할 필요가 없습니다. 메시지를 보내는 클라이언트를 식별하기 위해 자신의 프로토콜을 만들어야합니다 (hte 메시지 안의 클라이언트 1 또는 클라이언트 2인지 여부를 파싱해야합니다).

이것이 명확하지 않은 경우 알려주십시오.

+1

모두 사실이지만 질문에 대답하지 않습니다. – EJP

+0

'새 포트 사용'이 * 사실 * * 잘못되었습니다. – EJP