当前位置:编程学习 > C#/ASP.NET >>

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#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,