2010-01-18 7 views
1

포트 5010에서 수신 대기중인 서버 소켓이 있다고 가정 해보십시오. 클라이언트가 connect() API를 사용하여이 서버 소켓에 연결하려고하면 서버는 accept() API에서 소켓 연결을 허용합니다.소켓 프로그래밍을 사용하는 서버/클라이언트

accept() API는 서버/클라이언트 연결을위한 새로운 소켓을 반환합니다. 이제 서버와 클라이언트 간의 모든 데이터 전송은이 새로 생성 된 소켓을 사용하여 수행됩니다. 데이터 전송은 동일한 포트 5010에서 발생합니까? 그렇지 않으면 accept() API의 결과로 새 소켓이 반환 될 때 포트가 선택되는 방식은 무엇입니까?

답변

1

서버와 클라이언트 소켓 간의 연결은 튜플 (serverAddress, serverPort, clientAddress, clientPort)으로 식별됩니다. 서버 주소와 서버 포트는 항상 동일하게 유지됩니다 (분명히). 클라이언트는 동일한 주소를 다시 사용하는 경우 (예 : 동일한 컴퓨터에 여러 클라이언트가있는 경우) 충돌을 피하기 위해 (세미) 무작위 "원본"포트를 할당합니다.

+0

서버에 연결된 클라이언트가 다섯 개인 경우 각 클라이언트는 포트 5010으로 만 데이터를 보냅니다. 서버가 어떤 클라이언트 데이터와 차별화 되는가? – cppdev

+0

튜플의 두 번째 부분 (클라이언트 ip, 클라이언트 포트). –

관련 문제