1、经典错误之 无法访问已释放的对象。 对象名:“System.Net.Sockets.Socket”
 
 
(1)、问题现场
 

(2)、问题叙述

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

(3)、解决方案

使用下面一句:

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

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

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

扩展说明:

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

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

 

(1)问题现场

(2)、问题叙述

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

(3)、解决方案

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

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

本篇文章引自:http://blog.chinaunix.net/uid-25498312-id-3321852.html

C#socket通讯两个最经典错误解决方案的更多相关文章

  1. Linux 下Redis集群安装部署及使用详解(在线和离线两种安装+相关错误解决方案)

    一.应用场景介绍 本文主要是介绍Redis集群在Linux环境下的安装讲解,其中主要包括在联网的Linux环境和脱机的Linux环境下是如何安装的.因为大多数时候,公司的生产环境是在内网环境下,无外网 ...

  2. mysql 经典错误解决方案 :Incorrect string value 'xE6x95x85xE4xBAx8B...' for column

    1.关闭当前服务器2.删除正在使用的数据库drop database 数据库名字;3.查看字符集, SHOW VARIABLES LIKE 'character_set_%'; 把所有latin1的都 ...

  3. 基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)

    今天我们来盘一盘Socket通讯和WebSocket协议在即时通讯的小应用——聊天. 理论大家估计都知道得差不多了,小编也通过查阅各种资料对理论知识进行了充电,发现好多demo似懂非懂,拷贝回来又运行 ...

  4. Protobuf实现Android Socket通讯开发教程

    本节为您介绍Protobuf实现Android Socket通讯开发教程,因此,我们需要先了理一下protobuf 是什么? Protocol buffers是一种编码方法构造的一种有效而可扩展的格式 ...

  5. 试解析Tomcat运行原理(一)--- socket通讯

    关于这篇文章也确实筹划了很久,今天决定开篇写第一篇,说起tomcat首先很容易联想到IIS,因为我最开始使用的就是.net技术,我第一次使用asp写学生成绩管理系统后,很茫然如何让别人都能看到或者说使 ...

  6. Android笔记:Socket通讯常见问题

    经验证的socket通讯问题 1.如果是模拟器和本机PC直接通讯,需要使用本机IP地址 而不是 10.0.2.2  如本机的静态地址为192.168.1.2 则直接使用该地址 2.接收和连接代码不能在 ...

  7. java socket通讯(一) 入门示例

    一.入门 要想学习socket通讯,首先得知道tcp/ip和udp连接,具体可参考浅谈TCP/IP 和 UDP的区别 二.示例 首先新建了一个java工程,包括两个部分,客户端SocketClient ...

  8. Socket网络通讯开发总结之:Java 与 C进行Socket通讯 + [备忘] Java和C之间的通讯

    Socket网络通讯开发总结之:Java 与 C进行Socket通讯 http://blog.sina.com.cn/s/blog_55934df80100i55l.html (2010-04-08 ...

  9. 利用BlazeDS的AMF3数据封装与Flash 进行Socket通讯

    前几天看到了Adobe有个开源项目BlazeDS,里面提供了Java封装AMF3格式的方法.这个项目貌似主要是利用Flex来Remoting的,不过我们可以利用他来与Flash中的Socket通讯. ...

随机推荐

  1. java事件处理3

    鼠标拖动事件 接口MouseMotionListener 两个方法 mouseDragged(MouseEvent)//拖动鼠标 mouseMoved(MouseEvent)//移动鼠标 一个拖动按钮 ...

  2. STL 之 vector 用法

    一.头文件 #include<vector> 二.常用方法: // 在这个向量的尾部插入x的考贝,平均时间为常数,最坏时间为O(n): 1: void push_back(const T& ...

  3. 狗狗40题~ (Volume C)

    A - Triangles 记忆化搜索呗.搜索以某三角形为顶的最大面积,注意边界情况. #include <stdio.h> #include <cstring> #inclu ...

  4. 【原创】用shell+ant构建apk

    #!/bin/bash ######################################################################### ## $PRODVERSIO ...

  5. Android Studio下运行UiAutomator

    之前学习UiAutomator均是在eclipse下,因学习Android开发接触AS越来越频繁,于是想知道AS下如何建立UiAutomator项目.网上的资料多很凌乱,查了很多资料,实践后发现,只要 ...

  6. android popupwindow低版本报空指针

    在项目中使用Popupwindow pop=new Popupwindow();在2.3版本报 异常信息: Exception: null 堆栈信息: android.widget.PopupWind ...

  7. IO 常用

    1. read file from folder DirectoryInfo folder = new DirectoryInfo(@"C:\Users\keatkeat\Desktop\K ...

  8. Largest product in a series

    这个我开始理解错了,算错了. 我以为是求连续5个数的最大值,结果,是连接5个数相乘的最大值. 英语不好,容易吃亏啊. Find the greatest product of five consecu ...

  9. 用MySQL创建数据库和数据库表

    1.使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; +----------+ | Database | +----------+ | mysql ...

  10. VS2013中使用GDI+绘图

    VC范例,400多个例子源代码下载 http://download.csdn.net/detail/bigtree_mfc/7727977 VS2013中使用GDI+绘图和VC6.0不同,在VC6.0 ...