c# - 如果已启动的进程处于打开状态,应用程序退出后套接字不会关闭

标签 c# .net sockets

我的 C# .net 应用程序当前执行以下操作(除其他外):

  1. 创建一个在特定端口上打开套接字并等待指令的线程。
  2. 消息进来,套接字线程读取消息并引发事件。
  3. 事件处理程序调用必要的函数来解析消息并执行必要的操作,例如启动应用程序。
  4. 指定的外部“应用程序”异步启动。

当我的应用程序重新启动但外部应用程序没有关闭时,套接字似乎从未关闭过。然后,当我再次尝试在该端口上启动通信时,出现错误。但是,只要关闭外部应用程序,我就可以在该端口上打开一个套接字。

看来我的程序没有正常关闭。它应该在退出时终止套接字,但是当外部进程正在运行时,该套接字永远不会关闭。

有什么想法吗?

最佳答案

这只是一个尝试,因为我已经看到您是如何启动外部进程的。如果您正在创建一个 Process 对象,我猜您没有设置:

ProcessStartInfo.UseShellExecute = true;

如果 UseShellExecute 设置为 false,子进程将从父进程继承打开的套接字句柄。这将使您的套接字保持打开状态,即使父应用程序已关闭也是如此。

关于c# - 如果已启动的进程处于打开状态,应用程序退出后套接字不会关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10235093/

相关文章:

C#变量新鲜度

c# - Windows 窗体图标未显示在任务栏 C#

c# - 必须使用适当的属性或方法修改 'Content-Type' header 。参数名称 : name

c# - 经典 ASP 如何以集成模式融入 ASP.NET 生命周期?

python - 如何保持Python服务器连接打开,直到客户端完成它?

java - 某些文件格式通过 FTP 损坏

C# 使用 WHERE 获取每个第 n 个元素,结果很奇怪

.net - 用字符串初始化的StringBuilder是否包含(仅)该字符串足够的空间?

.net - Log4net 每天滚动 - 带日期的文件名格式

c++ - 为客户端-服务器通信构建 TCP/IP 服务器的最佳方式?