ZeroMQ连接异常求助:SYN消息无响应问题
ZeroMQ C# 通信异常排查与资源释放需求
问题背景
在Unity项目集成ZeroMQ遇到异常后,改用Visual Studio 2019独立C#控制台项目测试,出现以下异常情况:
- 连接稳定性差,初始两台电脑间的Pub/Sub及其他套接字通信正常,一两周后Pub/Sub消息完全无法送达
- 最初仅Unity发送消息时异常,后续控制台项目也出现相同问题,计算机1到计算机2的通信失效,但反向通信正常
- 切换为Request/Response套接字后曾正常工作,但安装Wireshark后突然失效
网络排查细节
通过Wireshark抓包发现:计算机2向计算机1的3030端口发送SYN请求,但计算机1无响应;但执行netstat命令显示该端口处于监听状态:
TCP 0.0.0.0:3030 COMPUTER_NAME:0 LISTENING
已多次重启计算机1,且普通套接字通信正常,排除IP地址问题,怀疑频繁测试过程中套接字未正确关闭/释放。
测试代码示例
计算机1(Response服务端)
using (ResponseSocket server = new ResponseSocket()) { int port = 3030; server.Bind($"tcp://*:{port}"); int i = 0; Console.WriteLine($"Server is listening on port {port}"); while (true) { string message = server.ReceiveFrameString(); Console.WriteLine($"Received: {message}"); string response = $"Thank you, for your message: {i}"; server.SendFrame(response); Console.WriteLine($"Response sent: {response}"); i++; Thread.Sleep(500); if (i > 20) break; } }
计算机2(Request客户端)
using (RequestSocket client = new RequestSocket()) { string ipAddress = "XX.XX.XXX.XXX"; // Ip Adress is censored int port = 3030; client.Connect($"tcp://{ipAddress}:{port}"); int i = 0; Console.WriteLine($"Connecting to " + $"tcp://{ipAddress}:{port}"); while (true) { string message = i.ToString(); client.SendFrame(message); Console.WriteLine($"Sent: {message}"); string response = client.ReceiveFrameString(); Console.WriteLine($"Message received: {response}"); i++; Thread.Sleep(500); if (i > 20) break; } }
核心需求
需要实现控制台程序卡住时,先安全释放ZeroMQ套接字资源,再退出程序的方法。
内容的提问来源于stack exchange,提问作者Ecko
相关产品推荐
相关产品推荐

