System.Net.Sockets.Socket SendAsync System.ObjectDisposedException: Cannot access a disposed object.

发生未处理的域异常!

System.ObjectDisposedException: Cannot access a disposed object.

Object name: ‘System.Net.Sockets.Socket‘.

at System.Net.Sockets.Socket.SendAsync(SocketAsyncEventArgs e)

在进行Socket长连接时,若服务器或客户端出现异常时,另外一端对Socket对话进行操作时,程序会出现无法访问已释放的对象的问题。例如客户端出现问题主动断开Socket时,当服务器操作Socket时,比如主动断开Socket会话,那么程序会出现“无法方位已释放的对象”,是由于客户端的原因导致服务器和客户端的Socket已经不存在或连接已经断开,即Socket已经释放,服务器再操作服务器和客户端的Socket肯定会报错,因此在服务器或客户端一侧操作Socket时,必须首先判断Socket是否存在、连接是否正常,只有存在且连接正常的Socket才允许操作。

例子1:以服务器断开Socket为例:

                //判断Socket是否存在且连接正常,存在且连接正常的Socket才运行进行断开操作

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

{

//关闭Socket之前,首选需要把双方的Socket Shutdown掉

_cliSock.Shutdown(SocketShutdown.Both);

//Shutdown掉Socket后主线程停止10ms,保证Socket的Shutdown完成

System.Threading.Thread.Sleep(10);

//关闭客户端Socket,清理资源

_cliSock.Close();

}

例子2:
if (socket != null && socket.Connected && !socket.SendAsync(e))

时间: 2024-11-07 06:50:30

System.Net.Sockets.Socket SendAsync System.ObjectDisposedException: Cannot access a disposed object.的相关文章

Xamarin.Forms bug? System.ObjectDisposedException: Cannot access a disposed object

Hi, My Android Xamarin.Forms application uses a Navigation stack to display various views, I often have a list on a screen (A) that once a cell is clicked I push onto the stack a new screen (B), the user completes some form fields and then clicks a b

at System.Net.Sockets.Socket.Connect

Application Exception System.Net.Sockets.SocketException Connection refused Description: HTTP 500.Error processing request. Details: Non-web exception. Exception origin (name of application or object): System. Exception stack trace: at System.Net.Soc

问题:System.Net.Sockets.SocketException: 一个封锁操作被对 WSACancelBlockingCall 的调用中断。

背景 使用ThreadStart委托线程监听socket通信,在通信完毕后调用saveTrainResult提交信息 现在的问题 socket通信成功且数据解析成功,但在调用saveTrainResult方法时报异常信息: System.Net.Sockets.SocketException: 一个封锁操作被对 WSACancelBlockingCall 的调用中断. at System.Net.Sockets.Socket.Accept () [0x00000] in <filename un

解决WCF大数据量传输 ,System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接

开发中所用的数据需要通过WCF进行数据传输,结果就遇到了WCF大量传输问题 也就是提示System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接 网上解决方案都是千篇一律互相转发的,并且没有明确的解决方案或者按照,各个博客中的解决方案都没能解决这个问题. 为此我整整浪费了一天时间用来解决这个问题,而且用了最笨的办法一点点的尝试网上所查到的方案.对于精研WCF来说的这可能是一个小问题,但是对于仅仅了解wcf,一知半解的会很困惑.将解决方案贴出来希望能帮

未经处理的异常:System.Net.Sockets.SocketException: 以一种访问权限不允许的方式做了一个访问套接字的尝试

报错:未经处理的异常:System.Net.Sockets.SocketException: 以一种访问权限不允许的方式做了一个访问套接字的尝试 → 尝试以"管理员身份"运行程序,不行.→ 点击菜单下的"运行",输入"cmd",来到控制台.→ 输入"netstat -a"查看端口是否被占用,发现应用程序中所使用的端口已被占用.→ 更改应用程序的端口,问题解决.

NotSupportedException-无法将类型“System.DateTime”强制转换为类型“System.Object”

几张图就可以说明一切 2015-03-29 21:54:09,206 [77] ERROR log - System.NotSupportedException: 无法将类型“System.DateTime”强制转换为类型“System.Object”.LINQ to Entities 仅支持强制转换 EDM 基元或枚举类型. 在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.ValidateAndAdjustCastType

System.Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer的差别和分别什么时候用

一.System.Windows.Forms.Timer 1.基于Windows消息循环,用事件方式触发,在界面线程执行:是使用得比较多的Timer,Timer Start之后定时(按设定的Interval)调用挂接在Tick事件上的EvnetHandler.在这种Timer的EventHandler中可 以直接获取和修改UI元素而不会出现问题--因为这种Timer实际上就是在UI线程自身上进行调用的. 2.它是一个基于Form的计时器3.创建之后,你可以使用Interval设置Tick之间的跨

详解C#中System.IO.File类和System.IO.FileInfo类的用法

System.IO.File类和System.IO.FileInfo类主要提供有关文件的各种操作,在使用时需要引用System.IO命名空间.下面通过程序实例来介绍其主要属性和方法. (1) 文件打开方法:File.Open () 该方法的声明如下:     public static FileStream Open(string path,FileMode mode)  下面的代码打开存放在c:\tempuploads目录下名称为newFile.txt文件,并在该文件中写入hello. pri

Unable to chmod /system/build.prop.: Read-only file system

Unable to chmod /system/build.prop.: Read-only file system 只读文件系统 所以需要更改 使用下面的命令 mount -o remount,rw /dev/block/stl6 /system 设置完之后就恢复原来的状态 mount -o remount,ro /dev/block/stl6 /system