c# - 如何通过主机中的软件中止已建立的连接的消息找到 SocketException 的原因和原因?

标签 c# .net sockets tcpclient

我知道类似的问题可能已被问过很多次,但我想展示我所看到的行为,看看是否有人可以帮助预测其原因。

我正在编写一个通过 TCP 连接到其他 Windows 服务的 Windows 服务。 这有 100 个用户实体,每个实体有 5 个连接。这些用户使用各自的连接执行任务。

应用程序在 1 或 2 天内没有看到此问题。或者有时在开始后立即显示问题(-很少)。我跑得最好的一次是 4 到 5 天没有显示此异常。在该应用程序终止或由于各种原因我不得不停止它之后。

我想知道是什么原因造成的? 这是堆栈跟踪。

System.IO.IOException:无法将数据写入传输连接:主机中的软件中止了已建立的连接。 ---> System.Net.Sockets.SocketException:已建立的连接被主机中的软件中止 在 System.Net.Sockets.Socket.Send(字节 [] 缓冲区,Int32 偏移量,Int32 大小,SocketFlags socketFlags) 在 System.Net.Sockets.NetworkStream.Write(字节 [] 缓冲区,Int32 偏移量,Int32 大小) --- 内部异常堆栈跟踪结束 --- 在 System.Net.Sockets.NetworkStream.Write(字节 [] 缓冲区,Int32 偏移量,Int32 大小) 在 System.Net.Security._SslStream.StartWriting(字节 [] 缓冲区,Int32 偏移量,Int32 计数,AsyncProtocolRequest asyncRequest) 在 System.Net.Security._SslStream.ProcessWrite(字节 [] 缓冲区,Int32 偏移量,Int32 计数,AsyncProtocolRequest asyncRequest) 在 System.Net.Security.SslStream.Write(字节 [] 缓冲区,Int32 偏移量,Int32 计数)

最佳答案

你找到解决办法了吗?如果将网络跟踪添加到 app.config 中,也许您可​​以更接近解决方案?

<?xml version="1.0"?>
<configuration>
    <system.diagnostics>
        <sources>
            <source name="System.Net.Sockets">
                <listeners>
                    <add name="Sockets"/>
                </listeners>
            </source>
        </sources>
        <switches>
            <add name="System.Net.Sockets" value="31"/>
        </switches>
        <sharedListeners>
            <add name="Sockets" type="System.Diagnostics.TextWriterTraceListener" initializeData="c:\socketdump.log"/>
        </sharedListeners>
        <trace autoflush="true"/>
    </system.diagnostics>
</configuration>

此外,也许您可​​以为 TLS/SSL 设置日志记录。添加以下 DWORD 并将其设置为 7,到您的注册表,重新启动并在系统事件日志中查看所有 schannel 事件:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\EventLogging

希望能有所帮助,但我想这可能需要在黑暗中进行大量打击...

关于c# - 如何通过主机中的软件中止已建立的连接的消息找到 SocketException 的原因和原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2293582/

相关文章:

c# - WinForms 如何强制执行线程亲和性?

c# - 如何增加单选按钮之间的间距

c - 来自 recvfrom() 和 AF_PACKET/PF_PACKET 的套接字地址类型

c# - 哪个NotifyFilter触发了FileSystemWatcher.Changed?

c# - 非静态类比静态类有什么优势?

c# - 复选框数据绑定(bind)

c# - 使用 WCF 的 REST 服务 - 可选的查询字符串参数?

linux - 如何找出套接字指向什么?

python - 多个同时网络连接 - Telnet 服务器,Python

c# - .NET Core Identity 使用 userManager 并加载额外的 ApplicationUser 属性