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#_Sockets - Fatal编程技术网

C# 当客户端发送消息时,服务器关闭连接

C# 当客户端发送消息时,服务器关闭连接,c#,sockets,C#,Sockets,我试图学习服务器/客户机范例。我已经创建了一个在给定端口上侦听连接和输入的服务器 我的问题是,当客户端连接并发送消息时,服务器会关闭连接,并停止侦听输入。我想要的是,当客户端发送消息时,服务器不应该关闭连接,但仍然要从连接的客户端获取输入。我知道我一次只能处理一个客户机,因为我没有为每个客户机创建线程,但这不会导致服务器在客户机发送消息时立即关闭连接 这是我的服务器代码: public void startServer() { try { IPAddres

我试图学习服务器/客户机范例。我已经创建了一个在给定端口上侦听连接和输入的服务器

我的问题是,当客户端连接并发送消息时,服务器会关闭连接,并停止侦听输入。我想要的是,当客户端发送消息时,服务器不应该关闭连接,但仍然要从连接的客户端获取输入。我知道我一次只能处理一个客户机,因为我没有为每个客户机创建线程,但这不会导致服务器在客户机发送消息时立即关闭连接

这是我的服务器代码:

public void startServer() {
        try {
            IPAddress iAd = IPAddress.Parse("127.0.0.10");
            TcpListener tcpListner = new TcpListener(iAd, 9000);

            tcpListner.Start();
            Console.WriteLine("The server is running on port: 9000");
            Console.WriteLine("The local End point is: " + tcpListner.LocalEndpoint + "\nWaiting for a connection");

            Socket socket = tcpListner.AcceptSocket();
            Console.WriteLine("\nConnection from client: " + socket.RemoteEndPoint);

            byte[] b =new byte[100];
            int k = socket.Receive(b);

            for (int i=0;i<k;i++) {
                Console.Write("Recieved: " + Convert.ToChar(b[i]));

            }

            ASCIIEncoding asen=new ASCIIEncoding();
            socket.Send(asen.GetBytes("The string was recieved by the server."));
            Console.WriteLine("\nSent Acknowledgement");
            /* clean up */            
            socket.Close();
            tcpListner.Stop();

        } catch(Exception e) {
            Console.WriteLine(e.Message);
        }
    }
public void startServer(){
试一试{
IPAddress iAd=IPAddress.Parse(“127.0.0.10”);
TcpListener tcpListner=新的TcpListener(iAd,9000);
tcpListner.Start();
WriteLine(“服务器正在端口9000上运行”);
Console.WriteLine(“本地端点为:“+tcpListner.LocalEndpoint+”\n正在等待连接”);
Socket-Socket=tcpListner.AcceptSocket();
Console.WriteLine(“\n来自客户端的连接:“+socket.RemoteEndPoint”);
字节[]b=新字节[100];
int k=插座接收(b);

对于(inti=0;iIn您的服务器代码-可能是其中的一对..您需要它来接收多条消息吗?(每个客户端)我希望当客户端连接时,他应该能够继续向服务器写入内容,直到他选择断开连接。现在,客户端只能写入1个字,当他发送该字时,服务器打印该字,然后关闭连接,而不是一直等待来自该客户端的更多消息。因此,您需要在服务中循环从声明“b”到“发送确认”的r端。我建议查看MSDN示例:在您的服务器代码中-可能有两个。您需要它来接收多条消息吗?(每个客户端)我希望当客户端连接时,他应该能够继续向服务器写入内容,直到他选择断开连接。现在,客户端只能写入1个字,当他发送该字时,服务器打印该字,然后关闭连接,而不是一直等待来自该客户端的更多消息。因此,您需要在服务中循环r方从声明“b”到“发送确认”。我建议查看MSDN示例:
public void StartClient(string servToConnectTo, int port) {
        try{
            client.Connect(servToConnectTo, port);

            Console.WriteLine("Connected to server: " + servToConnectTo + " on port: " + port);
            Console.WriteLine ("Write input to server...");

            String input = Console.ReadLine();
            Stream stream = client.GetStream();

            ASCIIEncoding asen = new ASCIIEncoding();
            byte[] b = asen.GetBytes(input);
            Console.WriteLine("Sending...");

            stream.Write(b, 0, b.Length);

            byte[] bb = new byte[100];
            int k = stream.Read(bb, 0, 100);

            for(int i = 0; i < k; i++) {
                Console.Write(Convert.ToChar(bb[i]));
            }

            client.Close();

        } catch (Exception e) {
            Console.WriteLine (e.Message);
        }                           
    }