多个套接字连接

时间:2010-02-15 11:15:17

标签: c# .net sockets

我有多个设备连接到TCP / Ip端口,我想通过.Net中的套接字读取所有这些设备我怎么能在此之前连接单个设备并且它工作正常但现在我有多个设备可以帮助我监听多个套接字连接吗?

3 个答案:

答案 0 :(得分:1)

这不是一个完整的答案,但应该指出正确的方向。你可以使用类似的东西 Socket socketForClient = tcpListener.Accept();
呼吁每个连接客户端。您可以拥有一组Socket对象,您可以在新连接进入或关闭时处理/更新。

答案 1 :(得分: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();
}

在某些示例中,您可能会在BeginAccept(...)块中看到while(true)方法。但是你不需要使用异步。我认为使用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,你将了解它的工作原理。仔细阅读我给你的MSDN参考资料,这应该会给你一个很好的开始。

答案 2 :(得分:0)

通常,对于多连接应用程序,服务器会侦听特定端口,并在收到连接后返回一个新端口,您的设备将在该端口创建新套接字。