问题描述
我有旧的.NET代码,该代码使用TcpListener并需要在Windows 7和Windows 10 PC上运行。 最初,它使用一个单独的线程,其中使用了对TcpListener.AcceptSocket的阻塞调用。在应用程序退出时,调用Thread.Abort()杀死该线程。在Win 7和Win 10上,所有传入连接都可以正常工作,但是Abort会引起一些问题。这是退出的一种粗糙方法,无论如何都不建议。
我将其更改为使用Tasks + TcpListener.AcceptSocketAsync。它是一种更优雅的解决方案,并修复了由Thread.Abort()引起的退出问题。在Win 10上可以完美运行,但在Win 7上客户端连接无法通过。注意,同步方法适用于同一台Win 7 PC。我可以通过来回滚动代码在几分钟内对其进行测试。
这是异步网络代码的一部分:
var listener = new TcpListener(IPAddress.Loopback,port)
{
ExclusiveAddressUse = false
};
listener.Server.SetSocketoption(SocketoptionLevel.socket,SocketoptionName.ReuseAddress,1);
listener.Start();
while(!stop)
{
Socket sck;
try
{
sck = await listener.AcceptSocketAsync();
}
catch...
// process exceptions,exit conditions,read data
}
有人知道Win 7上TcpListener.AcceptSocketAsync的特定问题吗?
使用.NET Framework 4.7.2和Windows 7 x64。
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)