c# Socket中tcpListenr.stop 和直接结束监听进程有区别
最近在做一个比较复杂的socket多线程编程的服务程序 遇到了一个很奇怪的问题 跪求真正的高手来啊帮助!!!!主要是socket通信 TcpListenr和TcpClient建立连接后,Client循环以阻塞放射等待数据 client.GetStream().Read(...)
此时如果TcpListenr调用TcpListenr.Stop方法 Client端不仅不会抛出异常 且会一直无限循环接收到空字符
但是我进360安全卫士(网络连接查看器)内找到TcpListenr监听直接结束进程 Client端会抛出异常 跳出循环
具体代码如下:
客户端代码
try
{
TcpClient thisClient = new TcpClient();
thisClient.Connect(m_strIP, 8001);
NetworkStream NS = thisClient.GetStream();
while (StatusClass.ThreadStatus)
{
if (NS.CanRead)
{
//NS.ReadTimeout = 2000;
byte[] data = new byte[512];
int nLength = NS.Read(data, 0, data.Length);
StringBuilder myCompleteMessage = new StringBuilder();
myCompleteMessage.AppendFormat("{0}", Encoding.ASCII.GetString(data, 0, nLength));
}
}
}
catch (System.Exception ex)
{
}
--------------------编程问答-------------------- 在文件中有提到
You are responsible for closing your accepted connections separately.
所以你应该分别呼叫
ns.Close();
client.Close();
socket.Stop();
才正确吧~
补充:.NET技术 , C#