2

我遇到了一个奇怪的错误,我只尝试写入和读取流缓冲区,但是在尝试读取它时会引发 SocketException。

这是我的代码:

// create tcp client
System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient("<localhost>", <port>);

client.ReceiveTimeout = 1; // timeout 1sec
// get stream that can be used for reading/writing

System.Net.Sockets.NetworkStream stream = client.GetStream();

// prepare the request message
String request ="My message";
byte[] requestBytes = System.Text.Encoding.ASCII.GetBytes(request);
stream.Write(requestBytes, 0, requestBytes.Length);

// get the response message
byte[] responseByteBuffer = new byte[1000];
int bytesRead = stream.Read(responseByteBuffer, 0, 1000); //Here raise SocketException

错误:

Unhandled Exception: System.IO.IOException: Unable to read data from the transport connection: 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应。---> System.Net.Sockets.SocketException: 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机在 System.Net.Sockets.Socket 处没有响应。 System.Net.Sockets.NetworkStream.Read(Byte[] 缓冲区,Int32 偏移量,Int32 大小)处的接收(字节 [] 缓冲区,Int32 偏移量,Int32 大小,SocketFlags socketFlags) --- 内部异常堆栈跟踪结束 ---在 System.Net.Sockets.NetworkStream.Read(字节 [] 缓冲区,Int32 偏移量,Int32 大小)

但奇怪的是,在 Windows 7 上使用相同网络环境的相同代码可以正常工作。但是当我尝试在 Windows 10 崩溃中运行该工具时......不可用

我尝试了很多东西:增加接收和读取超时,关闭防火墙但行为相同。我也使用 Visual Studio 2015 中的网络跟踪,但同样的错误,对我没有任何提示......

4

0 回答 0