InvalidOperationException happened in EndRead:The operation is not allowed on non-connected sockets 网络ping的通还是报了这个错误
时间: 2025-04-07 11:05:33 浏览: 16
`InvalidOperationException happened in EndRead: The operation is not allowed on non-connected sockets.` 这一异常通常出现在尝试在网络通信过程中读取数据时,而此时套接字并未处于连接状态。也就是说,在调用 `EndRead` 方法前,相关的异步读取操作未能正常绑定至有效的网络资源(比如服务器断开了连接或者客户端未建立正确的链接)。
尽管网络 Ping 测试显示通路可用,这仅仅意味着基础 IP 层级可达,并不代表应用层协议下的服务端口开放并且能够维持稳定的 TCP 链接。如果程序设计存在瑕疵,就可能出现此异常情况。
### 解决思路
1. **检查Socket的状态**: 在进行任何读写操作之前,先确认 Socket 是否已经成功建立了连接。
```csharp
if(socket.Connected){
// 安全地进行读写
} else {
throw new InvalidOperationException("Socket has been disconnected.");
}
```
2. **合理关闭和释放资源**: 当结束会话或捕获到中断信号之后,立即调用 Close() 和 Dispose() 来清理占用的系统资源;同时也要注意避免重复释放已销毁的对象实例。
3. **增强容错机制**: 使用 try-catch 结构包裹所有可能引发此类问题的核心逻辑部分,以便及时响应各种潜在风险状况。
```csharp
try{
int bytes = mySocket.EndRead(ar);
} catch (ObjectDisposedException ex) {
Console.WriteLine("The socket was closed unexpectedly.");
} catch (InvalidOperationException ex){
Console.WriteLine(ex.Message);
}
```
4. **考虑超时设定**: 对长时间无回应的情况增加 timeout 设置,防止陷入死循环等待不可达的目标节点返回信息。
阅读全文
相关推荐



















