Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用C实现TCP客户机-服务器应用程序#_C#_Sockets_Client Server - Fatal编程技术网

C# 用C实现TCP客户机-服务器应用程序#

C# 用C实现TCP客户机-服务器应用程序#,c#,sockets,client-server,C#,Sockets,Client Server,我正在尝试实现一个客户端服务器应用程序,该应用程序 服务器程序有一个计数器,该计数器根据请求递增一(提供给客户端的计数器值不能重复) 客户端程序要求服务器程序增加计数器并获得增加的值 服务器程序应能够一次处理多个客户端(至少5个) 计数器值应由所有服务器线程共享(如果有) 我已经在不同的项目中实现了服务器和客户端应用程序。当我开始运行服务器和客户端时,下面一行的服务器程序会给出一个NullReferenceException NetworkStream netstream = ((TcpCli

我正在尝试实现一个客户端服务器应用程序,该应用程序 服务器程序有一个计数器,该计数器根据请求递增一(提供给客户端的计数器值不能重复)
客户端程序要求服务器程序增加计数器并获得增加的值
服务器程序应能够一次处理多个客户端(至少5个)
计数器值应由所有服务器线程共享(如果有)


我已经在不同的项目中实现了服务器和客户端应用程序。当我开始运行服务器和客户端时,下面一行的服务器程序会给出一个NullReferenceException

NetworkStream netstream = ((TcpClient)client).GetStream();
我是C#新手。我想知道客户端如何连接到服务器并获得递增的值。 我在这里附上了我的代码。 提前谢谢。

MyServer.cs

public abstract class MyServer
    {

        private static int port = 8080;
        private static TcpListener listener;
        private static Thread thread;
        private static int clientId = 0;

        static void Main(string[] args)
        {

            listener = new TcpListener(new IPAddress(new byte[] {127,0,0,1}),port);
            thread = new Thread(new ThreadStart(Listen));
            thread.Start();
        }


        private static void Listen()
        {
            listener.Start();
            Console.WriteLine("Listening on: " + port.ToString());

            while(true)
            {
                Console.WriteLine("Waiting for connection....");
                Console.WriteLine("Client No: " + clientId);
                TcpClient client = listener.AcceptTcpClient();
                Thread listenThread = new Thread(new ParameterizedThreadStart(ListenThread));
                listenThread.Start();
            }
        }

        private static void ListenThread(Object client)
        {

                NetworkStream netstream = ((TcpClient)client).GetStream();
                Console.WriteLine("Request made");
                clientId = clientId + 1;
                // String message = "Hello world";
                byte[] resMessage = Encoding.ASCII.GetBytes(clientId.ToString());
                netstream.Write(resMessage, 0, resMessage.Length);
                netstream.Close();


        }
    }
MyClient.cs

 class MyClient
    {
        static void Main(string[] args)
        {
            TcpClient tcpClient;
            int port = 8080;
            NetworkStream stream = null;

            tcpClient = new TcpClient("127.0.0.1", port);
            Console.WriteLine("Connection was established....");

            stream = tcpClient.GetStream();

            Byte[] response = new Byte[tcpClient.ReceiveBufferSize];
            stream.Read(response,0,(int)tcpClient.ReceiveBufferSize);

            String returnData = Encoding.UTF8.GetString(response);
            Console.WriteLine("Server Response " + returnData);

            tcpClient.Close();
            stream.Close();

        }
    }

当线程需要一个参数(客户端的
TcpStream
)时,您启动线程时没有参数。更改此项:

listenThread.Start();
为此:

listenThread.Start(client);
顺便说一下,我将该线程称为
clientThread
,而不是
listenThread
;线程没有侦听,它正在处理客户端