问题描述
侦听线程在构造函数中启动this.IPP2P=newIPEndPoint(Dns.Resolve(System.Net.Dns.GetHostName()).AddressList[0],ClientPort);this.listenthread=newThread(Listen);this.listenthread.Start();然后listen函数是:privatevoidListen(){try{socket_listen.Bind(IPP2P);}catch(Exception){MessageBox.Show("监听失败");return;}while(true){socket_listen.Listen(10);socket_accept[num_con]=socket_listen.Accept();IPP2P_other[num_con]=(IPEndPoint)socket_accept[num_con].RemoteEndPoint;acceptthread[num_con]=newThread(Recieve);acceptthread[num_con].Start(num_con);}}考虑要同时进行多个P2P聊天,因此每侦听到一次请求都会新建一个接收线程并且进入Recieve函数接收数据,但是程序运行过程中我发现当某两个人聊天结束后再次发起聊天(即一端第二次被发起请求),就会出现无法侦听到的情况,这是什么原因呢?是关闭聊天窗口是没有将原来的连接析构干净吗?还是有其他原因?多谢各位大大啦~~
解决方案
解决方案二:
建议检查下侦听哪里,当客户端下线后是否移除了,如果是等待是否跟重连对应上了,跟客户端应该没啥问题,关键调试服务端侦听,和处理部分。
解决方案三:
代码异常简陋不要乱用数组,你这样用,数组早晚有溢出的时候你可以使用异步侦听,或者线程池
解决方案四:
楼主去搜索无阻塞通讯通讯吧,就学习微软的标准文档,然后再来写这个程序。长连接的应用在公网上很难活下来了,在学习无阻塞过后,要把系统设计为短连接应用。