我用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();
}
}
现在出现了一个问题,偶尔会出现错误“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();
}
}
汇编集:System(在 system.dll 中)http://www.cnblogs.com/stg609/archive/2008/11/15/1333889.html