2009-08-12 2 views
5

서버가 명명 된 파이프 "myTestPipe"를 만들었다 고합시다. "myTestPipe"에 연결할 수있는 클라이언트 수는 얼마입니까? 내가 웹에서 읽은 것에서는 오직 한 명의 고객 만이 할 수있는 것처럼 보이지만 확실히하고 싶었습니다.명명 된 파이프에 연결할 수있는 클라이언트의 수

하나만있는 경우 서버가 클라이언트 프로세스가 연결될 때까지 기다렸다가 통신을 수행 할 때 Asunchronous 메서드 BeginWaitForConnection() 대신 WaitForConnection() 차단을 사용하는 것이 가장 좋습니다. (다른 클라이언트 연결에 대해 걱정할 필요가 없음)

답변

9

동일한 명명 된 파이프에 둘 이상의 클라이언트를 연결할 수 있습니다. Windows에서 현재 제한은 서버의 연결을 포함하여 단일 명명 된 파이프에 256 개의 동시 연결이 있다고 생각합니다.

은 (불행히도, 난 참조에 해당하는 MSDN 페이지를 추적 할 수 있지만,이 CPAN pipes reference이 제한을 언급하고있다.)

+1

답변 해 주셔서 감사합니다. 그래도 질문이 있습니다. 명명 된 파이프를 통해 NamedPipeClients가 보내는 이진 파일을받는 서버를 구현하고 있습니다. 같은 시간에 두 개 이상의 스레드를 인스턴스화하여 파일을 전송할 수있는 다중 스레드 NamedPipeClient가 있다고 가정합니다. 서버가 실제로이 바이트를 보낸 소스 클라이언트를 어떻게 구별 할 수 있습니까? 아마도 내 질문은 : 하나 이상의 클라이언트가 파이프에 데이터를 쓰고있을 때, 다른 사람들과 겹쳐 지는가? 누가 당신에게 무엇을 보냈는지 말할 수없는 방식으로? 그것이 잘 설명되기를 바랍니다! thanks again – Derar

+1

중복 된 I/O, 멀티 스레딩 또는 완료 루틴 사용을 포함하여 실제로 두 가지 옵션이 있습니다. MSDN 여기에 단일 서버에서 여러 클라이언트 연결을 처리하는 좋은 설명서 (모든 3 옵션 포함) 있습니다 : http://msdn.microsoft.com/en-us/library/aa365594%28VS.85%29.aspx –

+0

그것은 중요합니다 위의 예에서 단일 서버 파이프 인스턴스는 단일 클라이언트 만 처리 할 수 ​​있다는 것을 명심하십시오. 주어진 이름의 pipe_는 여러 개의 연결을 처리 할 수 ​​있지만 각 연결은 별도의 서버 파이프 인스턴스가 기다리고 처리해야합니다. 서버 파이프 인스턴스가 연결되면 현재 연결이 끊어지고 서버 파이프가 다른 연결을 기다릴 때까지 추가 연결에 사용할 수 없습니다. 위의 대답은 사실과 일치하지만 명명 된 파이프와 서버 파이프 객체가 혼동되어 명확하지 않습니다. –

9

당신은 실제로 하나 개의 파이프를 작성하고 연결을 기다린가 연결되면,을 만들 두 번째로 기다려.

작성하고 연결을 기다리는 파이프마다 최대 하나의 연결 만 허용됩니다 (한 번에 요청/응답/닫기 스타일 인 경우 리사이클 할 수 있음).

따라서 각 연결은 소켓 또는 다른 스트림과 같이 1 대 1입니다.

+0

너무 많은 클라이언트가 너무 빠른 상황에 연결되어있을 때 어떻게 처리합니까? 자신의 접근 방식을 사용하는 내 서버에 20 개의 요청을 수행하는 스패머를 만들었지 만 2-3 개의 클라이언트 연결 후에 나머지 요청은 기존 파이프에 연결하려고 시도하지만 요청을 보내려고 할 때까지 파이프는 이미 폐쇄되었습니다. NamedPipeServerStream 당 연결 수를 제한하는 방법이 있습니까? – codenamezero

관련 문제