socket问题请教 cannot access a disposed object

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

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();
}
}

...全文
1653 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chkmouse 2012-09-27
  • 打赏
  • 举报
回复
奇怪ls的ls怎么得的分,马甲吧.
cshzxq2000 2011-12-12
  • 打赏
  • 举报
回复
没有人再给点建议嘛?感谢啊
csdn_aspnet 2011-12-11
  • 打赏
  • 举报
回复
命名空间:System.Net.Sockets
汇编集:System(在 system.dll 中)

http://www.cnblogs.com/stg609/archive/2008/11/15/1333889.html
cshzxq2000 2011-12-11
  • 打赏
  • 举报
回复
自己顶一个

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧