首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

socket有关问题请问 cannot access a disposed object

2012-10-23 
socket问题请教 cannot access a disposed object我用C#写了一个socket转发的程序,先监听本地端口,当监听

socket问题请教 cannot access a disposed object
我用C#写了一个socket转发的程序,先监听本地端口,当监听到某个消息时,对这个消息作出判断,然后转发给其他的电脑。 
现在出现了一个问题,偶尔会出现错误“cannot access a disposed object.object name:'System.Net.Sockets.Socket'”
有时候出现一下,,但是连接还是正常的,有时候出现这个错误后程序就直接停了,其他客户端都连不上.
网络可能不是很稳定,中间异常处理也比较少,因为刚接触,有没有高手给点建议?不胜感激!

C# code
public void OnConnectRequest(IAsyncResult ar) {    try            {                //初始化一个SOCKET,用于其它客户端的连接                server1 = (Socket)ar.AsyncState;                Client = server1.EndAccept(ar);                //将要发送给连接上来的客户端的提示字符串e                DateTimeOffset now = DateTimeOffset.Now;                Byte[] byteDateLine = new byte[1048576];                remote = Client.RemoteEndPoint;                //连接成功 写入到日志文件中                Log.wlog(Client.RemoteEndPoint.ToString() + "连接成功。" + now.ToString("G") + "\r\n");                userListOperate(Client.RemoteEndPoint.ToString());                //等待新的客户端连接                server1.BeginAccept(new AsyncCallback(OnConnectRequest), server1);                while (true)                {                    int recv = Client.Receive(byteDateLine);                    string stringdata = Encoding.UTF8.GetString(byteDateLine, 0, recv);                    string ip = Client.RemoteEndPoint.ToString();                    //获取客户端的IP和端口                    if (recv <= 0)                    {                        //当客户端终止连接时                        Log.wlog(ip + "   " + now.ToString("G") + "  " + "已从服务器断开" + "\r\n");                        //在这里做处理 连接端口 释放端口 并删除userList的显示                        if (userList.InvokeRequired)                        {                            MyInvoke _myinvoke = new MyInvoke(userListOperateR);                            userList.Invoke(_myinvoke, new object[] { ip });                        }                        else                        {                            userList.Items.Remove(ip);                        }                        Client.Close();                        break;                    }            ......转发消息的程序        }      catch (Exception e)            {                Log.wlog("异常信息或者连接断开\r\n" + e.Message + "\r\n");                Client.Close();            }}            


[解决办法]
命名空间:System.Net.Sockets
汇编集:System(在 system.dll 中)

http://www.cnblogs.com/stg609/archive/2008/11/15/1333889.html

热点排行