TCP 错误: "System.InvalidOperationExceptio"



我一直在创建一个TCPClient,它应该连接到服务器,但收到此错误:

System.InvalidOperationException: '不允许在 未连接的插座。

这是我的代码:

Public String IPAddress = "192.168.100.xxx"
Public Int32 Port = 23;
public TcpClient client = new TcpClient();
public void Connect() {
    client.Connect(IPAddress, Port);
    // send first message request to server
    Byte[] msg_data = System.Text.Encoding.ASCII.GetBytes("Hello Server);
    // uses the GetStream public method to return the NetworkStream
    NetworkStream netStream = _client.GetStream();
    // write message to the network
    netStream.Write(msg_data, 0, msg_data.Length);
    // buffer to store the response bytes
    msg_data = new Byte[256];
    // read the first batch of response byte from arduino server
    Int32 bytes = netStream.Read(msg_data, 0, msg_data.Length);
    received_msg = System.Text.Encoding.ASCII.GetString(msg_data, 0, bytes);
    netStream.Close();
}
public void Send() {
    // message data byes to be sent to server
    Byte[] msg_data = System.Text.Encoding.ASCII.GetBytes(_sendMessage);
    // uses the GetStream public method to return the NetworkStream
    // ** Error Here: System.InvalidOperationException: 'The operation is not allowed on non-connected sockets.'
    NetworkStream netStream = client.GetStream(); 
    // write message to the network
    netStream.Write(msg_data, 0, msg_data.Length);
    // buffer to store the response bytes
    msg_data = new Byte[256];
    // read the first batch of response byte from arduino server
    Int32 bytes = netStream.Read(msg_data, 0, msg_data.Length);
    received_msg = System.Text.Encoding.ASCII.GetString(msg_data, 0, bytes);
    netStream.Close(); // close Stream
}

我在创建NetworkStream netStream = client.GetStream();的新实例时出现错误.一直在努力寻找导致错误的原因,我认为它以某种方式关闭了上面的连接。

一切都在一个类中,必须在软件中的任何位置调用。

客户端。GetStream(( 的实现方式如下:

return new NetworkStream(this.Client, true);

而 true 表示如果流被释放/关闭,它也会关闭/断开套接字/客户端。您应该能够通过直接调用来避免这种情况

var netStream = new NetworkStream(client.Client, false);

更好的是代替:

NetworkStream netStream = client.GetStream();
…
netSteam.Dlose();

要确保流始终关闭,即使写入错误,请执行以下操作:

using (var netStream = new NetworkStream(client.Client, false))
{
  …
}

相关内容

最新更新