在TCPIP连接时出现System.IO.IOException。

问题描述 投票:0回答:1

我的TCPIP Server-Client连接有问题。

在服务器启动时。

    {
        serverSocket = new TcpListener(IPAddress.Parse(ipServer), portServer); 
        serverSocket.Start();
        TcpClient clientSocket = default(TcpClient);
        clientSocket = serverSocket.AcceptTcpClient();
        try
        {

            while (true)
            {

                NetworkStream nwStream = clientSocket.GetStream();
                byte[] buffer = new byte[clientSocket.ReceiveBufferSize];
                nwStream.Read(buffer, 0, (int)clientSocket.ReceiveBufferSize);
                string getdata = Encoding.ASCII.GetString(buffer);
                getdata = getdata.Substring(0, getdata.Length);
                ServerTextTB.Text = getdata;

                string serverresponse = "Response";
                byte[] sendbuffer = Encoding.ASCII.GetBytes(serverresponse);

                nwStream.Write(sendbuffer, 0, sendbuffer.Length);
                nwStream.Flush();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

        clientSocket.Close();
        serverSocket.Stop();
    }

当客户端发送消息时。

    {
        TcpClient clientSocket = new TcpClient();
        clientSocket.Connect(ipClient, portClient);
        nwStream = clientSocket.GetStream();
        byte[] buffer = Encoding.ASCII.GetBytes(clienttext);
        nwStream.Write(buffer, 0, buffer.Length);
        nwStream.Flush();

        byte[] inStream = new byte[clientSocket.ReceiveBufferSize];
        nwStream.Read(inStream, 0, clientSocket.ReceiveBufferSize);
        string returndata = Encoding.ASCII.GetString(inStream);
        MessageBox.Show(returndata);
        clientSocket.Close();
        clientTextTB.Clear();
    }

我的问题是,每次我试图向服务器发送消息时,在我的on server start methode中的第62行( nwStream.Read(buffer, 0, (int)clientSocket.ReceiveBufferSize); )得到一个System.IO.IOException。

删除Trycatch后,我得到以下错误。

System.IO.IOException: 'Von der Übertragungsverbindung können keine Daten gelesen werden: Eine bestehende Verbindung wurde softwaregesteuert durch den Hostcomputer abgebrochen.'

翻译成英文就是这样的意思。

System.IO.IOException: Unable to read data from transport connection : An existing connection was closed by host.

有什么办法可以解决这个问题吗? 服务器和客户机都在同一台电脑上运行

问候& 谢谢

c# tcp tcpclient tcpserver
1个回答
0
投票

你的客户端在读回服务器的消息后关闭,而服务器继续循环,并在 "读 "中阻塞,等待客户端的消息。当客户端关闭连接时,服务器得到一个异常。

如果你想避免这种情况,你可以这样做 -移除循环,即在服务器端发送回消息给客户端后关闭套接字 -在客户端做一个类似的循环(连续写和读消息给服务器)。

© www.soinside.com 2019 - 2024. All rights reserved.