2017-04-16 1 views
0

몇 초 안에 웹캠으로 찍은 사진을 스트림하는 C# Windows 양식의 응용 프로그램이 있습니다. 사진 데이터가 TCP 포트에서 수신하는 서버로 전송됩니다.얼마나 많은 클라이언트가 하나의 TCP 포트에 연결할 수 있습니까?

제 질문은이 응용 프로그램이 수백 대의 컴퓨터에 설치되어있는 경우 단일 포트에서 수신 대기하는 문제가 있거나 각 클라이언트에 다른 포트를 할당해야합니까? 몇 초 후에 사진이 전송된다는 것을 명심하십시오.

다음은 서버 수신기의 코드입니다.

   Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
       socket.Bind(new IPEndPoint(IPAddress.Parse("some ip"),5001)); 

       Task.Factory.StartNew(() => 
       { 
        socket.Listen(500); 
        //socket listening code. 

       }, TaskCreationOptions.LongRunning); 

감사합니다.

답변

1

동일한 포트에서 여러 소켓을들을 수 있으므로 여러 클라이언트가 동일한 포트에서 통신 할 수 있으므로 걱정하지 마십시오.

예를 들어, 웹 사이트에서 액세스 할 때 포트 80 (또는 443 for https) 서버에 연결하면 잘 알 수 있습니다 ... Fortunatly, 여러 클라이언트가 웹 사이트에 액세스 할 수 있습니다 , 그리고 모두 같은 포트에! ;)

3

TCP 연결은 소스 IP 주소와 포트, 대상 IP 주소 및 포트의 네 가지 매개 변수로 특징 지어집니다. 이 네 가지가 독특하다면 혼동은 발생하지 않습니다.

원본에 실제적으로 고유 한 주소가 할당되었거나 (NAT 가능성이 높음) NAT 장치를 통해 터널링되므로 (따라서 고유 한 원본 포트로 지정 됨) 서버 측에서 아무 것도 할 필요가 없습니다.


각 연결된 클라이언트에 아무것도을 할당 생각하는 경우 (소켓과 일부 버퍼 이상), 당신은 아마 뭔가 잘못하고 있습니다. 독점 리소스를 고객에게 전담하지 마십시오.

2

참조 : C10k problem. 연결하는 클라이언트의 관점에서하지만 하지 않습니다 - 당신은 리스너 포트를 사용하는 경우, 당신은 기존의 리스너를 넘겨 한 후 연결을위한 임시 포트를 사용하게 뒤에서 것을

주 matter - 리스너 포트는 모든 최종 소켓에 대한 단일 입력 지점으로 유지됩니다.

FWIW : 스택 오버플로 여기에 실시간 업데이트를 구동하는 웹 소켓 서버 현재 평균 약 392,000 소켓의 총 포트 당 14,500 소켓, 서비스 인스턴스 당 3 개 포트, 9 개 서비스 인스턴스. 우리는 과거 어느 시점에서 훨씬 더 높은 것을 보았습니다. 그래서 네, 단일 청취자 포트 인 이나을 몇 백 개의 클라이언트에 쉽게 지원할 수 있습니다. 지원하고자하는 소켓이 많을수록 클라이언트를 더 많이 지원할 수 있습니다. 매우 적은 수의 고객.

관련 문제