WPF Socket连接问题:关闭错误提示框后无法重新连接求助
WPF Socket 重连问题修复方案
问题根源
你的代码里,socketWatch = new Socket(...)是在try块外执行的,第一次连接失败时,socketWatch已经被实例化。后续再尝试连接时,if (socketWatch == null)的判断不成立,完全不会进入连接逻辑,所以必须重启程序让socketWatch回到null状态才能重新尝试。
修复步骤
- 每次尝试连接前,先检查并释放已有Socket资源,避免资源占用或端口被占
- 移除
if (socketWatch == null)的限制,让每次输入新IP/端口都能执行完整连接流程 - 捕获异常时重置
socketWatch为null,确保下次可以重新初始化
修改后的代码示例
// 每次点击连接按钮时执行此方法 private void TryConnect() { // 清理旧的Socket资源 if (socketWatch != null) { socketWatch.Close(); socketWatch.Dispose(); socketWatch = null; dicScoket?.Clear(); } try { dicScoket = new Dictionary<string, Socket>(); socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress address = IPAddress.Parse(txtIP.Text.Trim()); IPEndPoint endPoint = new IPEndPoint(address, int.Parse(txtPort.Text.Trim())); socketWatch.Bind(endPoint); socketWatch.Listen(20); Listen(); Showmsg("Connected!"); } catch (Exception error) { MessageBox.Show($"Error: {error.Message}"); // 显示具体错误,方便排查问题 // 失败后强制清理Socket if (socketWatch != null) { socketWatch.Close(); socketWatch.Dispose(); socketWatch = null; } } }
关键修改说明
- 每次连接前强制清理旧Socket,避免资源泄漏或端口占用
- 移除
if (socketWatch == null)判断,确保每次输入新参数都能触发连接逻辑 - 异常捕获中增加Socket清理,保证失败后状态可重置
- 错误提示显示具体异常信息,便于定位IP/端口的具体问题
内容的提问来源于stack exchange,提问作者C2C
相关产品推荐
相关产品推荐

