首页 新闻 会员 周边 捐助

c# ,socket, 远程主机强迫关闭了一个现有的连接

0
悬赏园豆:100 [待解决问题]

编写软件,接收多个硬件设备数据,软件报错:

远程主机强迫关闭了一个现有的连接。 在 System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)

v-haoz的主页 v-haoz | 初学一级 | 园豆:102
提问于:2024-05-14 17:11
< >
分享
所有回答(3)
0

这个错误通常表示你的软件试图通过Socket连接到远程主机,但在通信过程中连接突然被远程主机关闭了。这可能是因为网络问题、远程主机故障、或者连接超时等原因引起的。

要解决这个问题,你可以考虑以下几点:

检查网络连接:确保你的网络连接是稳定的,没有断开或者丢包的情况。

处理异常:在你的C#代码中,使用try-catch语句来捕获SocketException异常,并在捕获到异常时进行适当的处理,比如重新连接或者提示用户。

增加超时处理:在Socket连接中设置适当的超时时间,这样如果连接长时间没有响应,就可以及时放弃连接。

日志记录:在你的软件中添加日志记录功能,记录下连接错误发生的时间、原因以及其他相关信息,这样有助于排查和解决问题。

与硬件设备通信协议:检查你与硬件设备通信的协议规范,确保你的软件与硬件设备之间的通信方式是正确的。

如果你能提供更多关于你的软件架构、代码片段或者更详细的错误信息,我可以给出更具体的建议。

Technologyforgood | 园豆:7730 (大侠五级) | 2024-05-14 17:19

首先是这个情况啊,硬件设备一直不停的,向服务器(也就是软件系统)发送数据,软件接收数据。
异常处理,已经做了: catch (SocketException ex)
{
if ((ex.SocketErrorCode == SocketError.ConnectionReset))
{
tc.SaveData("d:\log\ClientServerNtrip165.txt", ex.Message + ex.StackTrace);
// 关闭监听Socket
if (client != null)
{
client.Shutdown(SocketShutdown.Both);
tc.SaveData("d:\log\ClientServerNtrip168.txt", "not null");
client.Close();
tc.SaveData("d:\log\ClientServerNtrip168.txt", "170");
client = null;
tc.SaveData("d:\log\ClientServerNtrip188.txt", "171");
}
}
}如果有异常,就关闭该socket,并记录日志,通过日志,发现确实有日志记录,但是数据正常接收,不受影响,长时间之后,软件就会终止,自动退出了。

支持(0) 反对(0) v-haoz | 园豆:102 (初学一级) | 2024-05-14 17:28

@v-haoz: 是不i是client.Close();报错了

支持(0) 反对(0) 破烂世界毁灭吧操 | 园豆:140 (初学一级) | 2024-05-15 08:57

@戒吧老哥助我一臂之力: ![]
try-catch已经捕捉不到异常了,但是事件查看器,可以查看一下错误,莫非是这个方法的错误??

支持(0) 反对(0) v-haoz | 园豆:102 (初学一级) | 2024-05-17 14:42
0

就是你的连接方强制断开了,可能是网络本身问题,也可能是代码操作了关闭,也可能是关机...总而言之不是自己的问题,如果你是服务端,那么连接管理中应该释放掉该连接;如果你是客户端,也应该释放掉,然后可能根据业务需要重新连接。

花飘水流兮 | 园豆:13617 (专家六级) | 2024-05-23 12:15
0

缓冲区可能过大,如果头几个字节返回有长度信息,请按照长度信息创建缓冲区,

w0rd | 园豆:459 (菜鸟二级) | 2024-05-23 15:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册