服务端关闭侦听连接关闭问题

efenwu 2015-03-12 11:31:18
我button点开服务端每侦听到客户端就新建一个线程保持连接。button关闭侦听再打开的时候软件就死掉了,即使没连接也会死。我怀疑是关闭的时候侦听资源或者线程没释放,请问要怎么处理啊?怎么通知新建的线程释放关闭呢?谢谢

private void button1_Click(object sender, EventArgs e) {
if (isPortOpen == false) {
isPortOpen = true;
button1.ImageIndex = 1;

tServiceListern = new Thread(PortListern);
tServiceListern.IsBackground = true;
tServiceListern.Start();
}
else {
isPortOpen = false;
button1.ImageIndex = 0;
tServiceListern.Abort();

}
}
private void PortListern() {
IPAddress ipAD = IPAddress.Parse("127.0.0.1");
TcpListener MyService = new TcpListener(ipAD, 2001);//socket端点
MyService.Start(10);

TextThread("正在监听");
while (true) {
try {
Socket Mysocket = MyService.AcceptSocket(); //建立连接
if (Mysocket.Connected){
Thread clientservice = new Thread(ServiceClient);
clientservice.IsBackground = true;
clientservice.Start(Mysocket);
}

}
catch { }
}

}
...全文
137 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmakebest 2015-03-12
  • 打赏
  • 举报
回复
tServiceListern.Abort() 如此简单粗暴啊,正常方法应该是仅关闭套接字, 这样导致侦听线程内部发生异常,捕获到后退出循环,最好也关闭所有已经开启子线程. 同样是关闭子线程相关套接字(这就需要管理好所有套接字列表),子线程内部应该对每个 套接字有一个接收线程,关闭操作导致异常,捕获后退出接收线程,同时清理其他资源.
rayyu1989 2015-03-12
  • 打赏
  • 举报
回复
频繁开关是不行的 端口关闭后有个Time_wait状态
於黾 2015-03-12
  • 打赏
  • 举报
回复
你只关闭了侦听线程,其他那些新建的线程没有关闭啊 最好还是研究研究异步侦听,这样弄多线程同步阻塞是很坑的
efenwu 2015-03-12
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
你只关闭了侦听线程,其他那些新建的线程没有关闭啊 最好还是研究研究异步侦听,这样弄多线程同步阻塞是很坑的
有什么方法闭门这些新建的线程,异步的还未接触,才学的C#
efenwu 2015-03-12
  • 打赏
  • 举报
回复
引用 3 楼 tcmakebest 的回复:
tServiceListern.Abort() 如此简单粗暴啊,正常方法应该是仅关闭套接字, 这样导致侦听线程内部发生异常,捕获到后退出循环,最好也关闭所有已经开启子线程. 同样是关闭子线程相关套接字(这就需要管理好所有套接字列表),子线程内部应该对每个 套接字有一个接收线程,关闭操作导致异常,捕获后退出接收线程,同时清理其他资源.
请问套接字列表要怎么管理啊
本课程是《Flowable流程入门课程》的后续高级课程。在学习本课程前,应先学习入门课程,以掌握相关基础知识。高级课程着重讲解Flowable工作流的高级概念、复杂理论和实战应用。课程内容包括流程管理思想、技术与标准、工作流的控制模式和资源模式;Flowable数据库表及变量;与Spring、Spring Boot的集成;BPMN 2.0主要类图;Flowable高级服务如JAVA服务任务、脚本任务、Web Service任务、外部工作者任务、多实例任务、补偿处理程序、子流程和调用活动等;Flowable事件侦听器、执行侦听器和任务侦听器;Flowable历史和REST API;Flowable事务、并发性、身份管理及LDAP集成;Flowable高级主题如流程实例迁移、异步执行器的设计与配置、用于高并发的UUID ID生成器、多租户、高级流程引擎配置、执行自定义SQL和实验性流程调试器等;Flowable Eclipse设计器特性及定制;Flowable 事件注册;Flowable相关标准和规范如ISO8601标准和cron等。本课程对Flowable官方文档进行了彻底梳理和融汇贯通,并结合实践,形象生动、系统全面、简单易懂地呈现给大家,让大家从开源软件文档冗长耗时、英文晦涩难懂、概念理解困难、知识点分散等困境中解脱出来,从而能快速地将Flowable具有的高级特性应用到项目的高级需求和复杂实践中去。课程特色:案例和代码驱动、基础概念与经典实战相结合、知识环节融会贯通、关联知识平滑拓展、概念和原理展示形象生动。

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧