繁体   English   中英

定义客户端的C#tcp套接字

[英]C# tcp sockets defining clients

我正在尝试使用Visual Studio 2010设置tcp .net套接字网络。到目前为止,它可以正常工作,我可以将客户端连接到该网络,但是目前我无法定义所连接的客户端。 我需要像一组已连接的客户端,以便我可以更具体地了解与streamWrite的对象。

这是我的服务器代码,我正在从http://www.codeproject.com/Articles/511814/Multi-client-per-one-server-socket-programming-in复制所有这些代码

服务器代码

static TcpListener tcpListener = new TcpListener(25000);

    static void Listeners()
    {
        Socket socketForClient = tcpListener.AcceptSocket();
        if (socketForClient.Connected)
        {
            Console.WriteLine("Client:"+socketForClient.RemoteEndPoint+" now connected to server.");
            NetworkStream networkStream = new NetworkStream(socketForClient);

            System.IO.StreamWriter streamWriter =
            new System.IO.StreamWriter(networkStream);
            System.IO.StreamReader streamReader =
            new System.IO.StreamReader(networkStream);


            Console.WriteLine("type your message to be recieved by client:");
            string theString2 = Console.ReadLine();
            streamWriter.WriteLine(theString2);
            Console.WriteLine(theString2);
            streamWriter.Flush();

            while (true)
            {
                string theString = streamReader.ReadLine();
                Console.WriteLine("Message recieved by client:" + theString);
                if (theString == "exit")
                    break;
            }
            streamReader.Close();
            networkStream.Close();
            streamWriter.Close();


        }
        socketForClient.Close();
        Console.WriteLine("Press any key to exit from server program");
        Console.ReadKey();
    }

    public static void Main()
    {
        tcpListener.Start();
        Console.WriteLine("************This is Server program************");
        Console.WriteLine("Hoe many clients are going to connect to this server?:");
        int numberOfClientsYouNeedToConnect = int.Parse(Console.ReadLine());
        for (int i = 0; i < numberOfClientsYouNeedToConnect; i++)
        {
            Thread newThread = new Thread(new ThreadStart(Listeners));
            newThread.Start();
        }
    }

如果要坚持使用原始TCP套接字,则可以将委托/处理程序等传递给线程:

for (int i = 0; i < numberOfClientsYouNeedToConnect; i++)
{
     Thread newThread = new Thread(new ParameterizedThreadStart(Listeners));
     newThread.Start(i);
}

然后,您的侦听器需要获取一个object以匹配ParametrizedThreadStart 请参见MSDN。

但是,如果您正在开发两端(如我所评论),那么我建议针对这种情况使用诸如ASP.NET SignalR之类的更抽象的东西。 它增加了一些开销,但是您可以在方便抽象的级别上获得服务器到客户端的通信,反之亦然。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM