【发布时间】:2012-04-19 19:09:39
【问题描述】:
我的 C# .net 应用程序当前执行以下操作(除其他外):
- 创建一个在特定端口上打开套接字并等待指令的线程。
- 消息进来,套接字线程读取消息并引发事件。
- 事件处理程序调用必要的函数来解析消息并执行必要的操作,例如启动应用程序。
- 指定的外部“应用程序”异步启动。
当我的应用程序重新启动,但外部应用程序没有关闭时,套接字似乎永远不会关闭。然后,当我再次尝试在该端口上启动通信时,出现错误。但是,只要我关闭外部应用程序,我就可以在该端口上打开一个套接字。
我的程序似乎没有正常关闭。它应该在退出时杀死套接字,但是当外部进程正在运行时,套接字永远不会关闭。
有什么想法吗?
【问题讨论】:
-
你在处理socket吗?
-
你是如何运行外部进程的?请发布一些代码。
-
@M.Babcock 是的,我正在关闭套接字,并且我已经验证了在 UI 关闭时正在执行代码。我正在使用 TcpClient 和 TcpListener。客户端正在“关闭”,侦听器正在“停止”。然而,这似乎并没有释放端口。
-
@zmbq 非常简单——我正在创建一个新的“进程”对象、设置路径、启动它并处理输出。我不等待它关闭,我只是创建它然后去。
-
@nos 我可以尝试等待更长时间。我已经验证,只要我的外部进程(用于测试目的的 firefox)关闭,套接字就会立即关闭,但是只要 firefox 是打开的(到目前为止我已经等了 10 分钟)套接字不会不可用。这可能只是操作系统认为外部应用程序是我的进程的一部分并且不想释放端口的问题。我会在关闭后立即尝试重新打开它,看看会发生什么......