TCPClient Error: "System.InvalidOperationExceptio"
TCPClient Error: "System.InvalidOperationExceptio"
我一直在创建一个应该连接到服务器的 TCPClient,但我收到了这个错误:
System.InvalidOperationException: 'The operation is not allowed on
non-connected sockets.'
这是我的代码:
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();
的新实例时遇到错误。一直在努力寻找导致错误的原因,我认为它以某种方式关闭了上面的连接。
一切都在 class 中,必须在软件中的任何地方调用。
client.GetStream() 的实现方式如下:
return new NetworkStream(this.Client, true);
而 true 表示如果流是 disposed/closed,它也会 closes/disconnects socket/client。您应该可以通过直接调用
来避免这种情况
var netStream = new NetworkStream(client.Client, false);
更好的是:
NetworkStream netStream = client.GetStream();
…
netSteam.Dlose();
确保即使出现错误也始终关闭流:
using (var netStream = new NetworkStream(client.Client, false))
{
…
}
我一直在创建一个应该连接到服务器的 TCPClient,但我收到了这个错误:
System.InvalidOperationException: 'The operation is not allowed on non-connected sockets.'
这是我的代码:
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();
的新实例时遇到错误。一直在努力寻找导致错误的原因,我认为它以某种方式关闭了上面的连接。
一切都在 class 中,必须在软件中的任何地方调用。
client.GetStream() 的实现方式如下:
return new NetworkStream(this.Client, true);
而 true 表示如果流是 disposed/closed,它也会 closes/disconnects socket/client。您应该可以通过直接调用
来避免这种情况var netStream = new NetworkStream(client.Client, false);
更好的是:
NetworkStream netStream = client.GetStream();
…
netSteam.Dlose();
确保即使出现错误也始终关闭流:
using (var netStream = new NetworkStream(client.Client, false))
{
…
}