C#socket通讯两个最经典错误解决方案

简介: 1、经典错误之 无法访问已释放的对象。 对象名:“System.Net.Sockets.Socket”(1)、问题现场 (2)、问题叙述 程序中的某个地方调用到了socket.
1、经典错误之 无法访问已释放的对象。 对象名:“System.Net.Sockets.Socket”


(1)、问题现场

image


(2)、问题叙述

程序中的某个地方调用到了socket.close后,这个socket还被调用,就出爆出上面错误!


(3)、解决方案

使用下面一句: 


if (stsend != null && stsend.Connected)

stsend != null :这一句在socket.close之后,会无效的,因为关闭socket连接时已经将其所有连接的资源都释放了;故要与Connected全用;

stsend.Connected:获取一个值,该值指示 Socket上次操作是Send还是Receive形式连接到远程主机,如果都不是,那就是断开了。

扩展说明:

所有非托管资源程序员必须能控制资源释放,诸如数据库连接,SOCKET连接等在使用后都应当显示关闭,如果是长连接,在程序退出时应当确保所有占用的连接都被关闭。

 

 

2、经典错误之 "远程主机强迫关闭了一个现有的连接。"


(1)问题现场


image


(2)、问题叙述

   如下图,对于网络的经典问题,由于是server和client中的任意一方主动断开连接,导致弹出 “远程主机强迫关闭了一个现在连接”的异常。这种情况,会导致程序提示异常,无法继续往下执行。


(3)、解决方案

可以通过异常处理的方式,通过异常来提示网络不正常,从而跳出该程序分支,不至于因为异常问题程序瘫痪!

如下图,一Catch到这类System.Net.Sockets.SocketException异常(当然这里把它设为Exceptioin异常,抓取的范围更广),那么就用MessageBox给用户一个提示,然后从该分支退出就行了。

 

image

相关文章
|
1月前
|
数据处理 C# C++
如何使用C#和C++结构体实现Socket通信
如何使用C#和C++结构体实现Socket通信
|
6月前
|
安全 网络协议 网络安全
http https socket通讯详解?
http https socket通讯详解?
|
4月前
|
JSON C# 图形学
【Unity 3D】利用C#、Unity和Socket实现简单的在线聊天室工具(附源码 简单易懂)
【Unity 3D】利用C#、Unity和Socket实现简单的在线聊天室工具(附源码 简单易懂)
48 0
|
4月前
|
网络协议 Unix Linux
【Unity 3D】C#中Socket及TCP三次握手与四次挥手详解(超详细 图文解释)
【Unity 3D】C#中Socket及TCP三次握手与四次挥手详解(超详细 图文解释)
42 0
|
9月前
|
移动开发 监控 网络协议
基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)
基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)
|
7月前
|
网络协议 安全 API
C# Socket网络编程精华篇
C# Socket网络编程精华篇
|
Android开发
Android Socket通讯 之 心跳消息
Android Socket通讯 之 心跳消息
150 0
Android Socket通讯 之 心跳消息
|
设计模式 Java Android开发
Android Socket通讯 之 表情列表优化、业务逻辑优化
Android Socket通讯 之 表情列表优化、业务逻辑优化
206 0
Android Socket通讯 之 表情列表优化、业务逻辑优化
|
网络协议 API Android开发
Android Socket通讯
Android Socket通讯
123 0
Android Socket通讯
|
网络协议 图形学
Unity【Socket TCP】- 服务端与客户端通讯的简单示例
Unity【Socket TCP】- 服务端与客户端通讯的简单示例
501 0
Unity【Socket TCP】- 服务端与客户端通讯的简单示例