2010-02-15 5 views
1

여러 장치가 TCP/Ip 포트에 연결되어 있고 .NET에서 소켓을 통해이 장치를 모두 읽으 려합니다.이 장치를 연결하기 전에이 작업을 수행 할 수 있습니까? 아무도 여러 소켓 연결을 듣고 나를 도울 수있는 여러 장치가 있습니까?다중 소켓 연결

답변

0

일반적으로 다중 연결 응용 프로그램의 경우 서버가 특정 포트를 수신하고 연결을 수신 한 후 장치가 새 소켓을 생성 할 새 포트를 반환합니다.

1

이것은 완전한 대답은 아니지만 올바른 방향을 제시해야합니다.
Socket socketForClient = tcpListener.Accept();
같은 모든 연결 클라이언트를 사용할 수 있습니다. 새로운 연결이 들어 오거나 닫히면 처리하거나 업데이트 할 수있는 Socket 객체의 배열을 가질 수 있습니다.

1

비동기 Tcp 수신기를 생성하려고합니다. 여기에 읽기 : MSDN Socket Class

먼저 당신이 당신의 리스너를 설정 :

private static System.Threading.ManualResetEvent connectDone = 
      new System.Threading.ManualResetEvent(false); 

void StartListen(IPEndPoint serverEP, int numDevices) 
{ 
    sock.Bind(serverEP); 
    sock.Listen(numDevices); // basically sit here and wait for client to request connect 

    /* 
    * While statement not required here because AcceptConnection() 
    * method instructs the socket to BeginAccept()... 
    */ 
    connectDone.Reset(); 
    sock.BeginAccept(new AsyncCallback(AcceptConnection), sock); 
    connectDone.WaitOne(); 
} 

을 몇 가지 예에서, 당신은 while(true) 블록의 내부하여 BeginAccept(...) 방법을 볼 수 있습니다. 그러나 당신은 비동기를 필요로하지 않습니다. 나는 while(true)을 사용하는 것이 부적절하다고 생각합니다. 당신이 비동기 운동의 몇 가지를 작동하면, 보통

void AcceptConnection(IAsyncResult asyncRes) 
{ 
    connectDone.Set(); 
    System.Net.Sockets.Socket s = channelworker.EndAccept(asyncRes); 
    byte[] messagebuffer = new byte[bufferSize]; 

    /* 
    * Tell socket to begin Receiving from caller. 
    */ 
    s.BeginReceive(messageBuffer, 0, messageBuffer.Length, 
     System.Net.Sockets.SocketFlags.None, new AsyncCallback(Receive), s); 

    /* 
    * Tell Channel to go back to Accepting callers. 
    */ 
    connectDone.Reset(); 
    sock.BeginAccept(new AsyncCallback(AcceptConnection), sock); 
    connectDone.WaitOne(); 
} 

.Beginxxx/.Endxxx 방법의 묘리를 터득하고, AsyncCallback을 사용하여, 당신의 걸림 얻을 것이다 : 물론, 당신은 다음 aynchronously 연결을 수락 어떻게 작동하는지. 내가 준 MSDN 레퍼런스를 통해 읽어 보면 꽤 좋은 시작이 될 것입니다.