我想问一下.我现在也是做socket通信的.我的服务器端也和你的差不多.也是差步连接.异步接收.可是当我的客户端一断开连接.我不知道我应该如何去关掉我的这个sokcet连接.你是怎么处理的.谢谢!
private void ReceiveCallBack(IAsyncResult ar)
{
//从输入参数异步state对象中获取state和socket对象
StateObject state = (StateObject)ar.AsyncState;
Socket client = state.worksocket;
//从远程设备读取数据
try
{
int bytesRead = client.EndReceive(ar);
if (bytesRead > 0)
{
//有数据,存储.
state.sb.Append(Encoding.UTF8.GetString(state.buffer, 0, bytesRead));
//继续读取
// client.BeginReceive(state.buffer, 0, StateObject.buffersize,0,new AsyncCallback(ReceiveCallBack), state);
}
}
catch (SocketException ex)
{
Console.WriteLine(ex.ToString());
}
//所有数据读取完毕
if (state.sb.Length > 0)
{
Console.WriteLine(state.sb.ToString());
//string msg = "我收到了!";
//Send(client, msg);
} }我试着在catch里关了一下.可是我服务器端就接不到第二个客户端的连接了.高手指教一下!
private void ReceiveCallBack(IAsyncResult ar)
{
//从输入参数异步state对象中获取state和socket对象
StateObject state = (StateObject)ar.AsyncState;
Socket client = state.worksocket;
//从远程设备读取数据
try
{
int bytesRead = client.EndReceive(ar);
if (bytesRead > 0)
{
//有数据,存储.
state.sb.Append(Encoding.UTF8.GetString(state.buffer, 0, bytesRead));
//继续读取
// client.BeginReceive(state.buffer, 0, StateObject.buffersize,0,new AsyncCallback(ReceiveCallBack), state);
}
}
catch (SocketException ex)
{
Console.WriteLine(ex.ToString());
}
//所有数据读取完毕
if (state.sb.Length > 0)
{
Console.WriteLine(state.sb.ToString());
//string msg = "我收到了!";
//Send(client, msg);
} }我试着在catch里关了一下.可是我服务器端就接不到第二个客户端的连接了.高手指教一下!
解决方案 »
- C#odbcDataReader的问题
- 求一思路:打开一个网站的时候在没打开之前显示 请稍候。。。
- datagrid标头问题,高手指教。。
- OleDbCommand 查询 Access 数据库的 % 匹配问题
- 关于XmlDocument .CreateElement(string , string) 设置 namespaceURI 问题
- C# 窗体继承 删除后新添己存在问题
- 小问题,大家帮忙一下
- 怎样在一个datagrid控件里显示两个以上的表单?又是datagrid控件的问题!还请大家多多帮忙!
- 怎样从硬盘安装vs .net 2003中文企业版
- 如何用rowfilter属性
- Sql防注入字符串过滤,大家一起来帮我完善
- C#中密码判断,请教
另外我想问一下专家。我现在是一个服务器接收。开了两个客户端。一切正常。可是我把一个客户端关掉
我再去连接时就发生了异常:
由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作
我搜了一下。可能是因为socket 连接没有释放!
我是在BeginAccept处接到的异常.
能不能再指点一下。谢谢sp1234专家的热心帮助!