关于Socket的一部接收方法AcceptAsync

疯狂的犹太人 2013-09-22 05:03:20
自己做了个聊天工具,想在服务端用这种的AcceptAsync异步方法去接收连接对象,
发现改成这样后,虽然是异步接收,【SocketAsyncEventArgs】对象触发不了自己的_Completed事件,
如下代码:
private void Listen()
{
//实例化通信对象
ipEndPiont =
new IPEndPoint(IPAddress.Parse(txtIp.Text), int.Parse(txtPort.Text));
ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

//SocketAysncEventArgs objects to allocate
argsPool = new SocketArgsPool(10);
bufferPool = new BufferPool(1024,1024);

try
{
//设定监听
ServerSocket.Bind(ipEndPiont);
ServerSocket.Listen(10);

//分配【SocketAsyncEventArgs】对象
SocketEventArg = argsPool.CheckOut();
//设定缓冲区大小
bufferPool.CheckOut(SocketEventArg);

SocketEventArg.Completed +=
new EventHandler<SocketAsyncEventArgs>(OnConnectRequest_Completed);

bool IsHadle = ServerSocket.AcceptAsync(SocketEventArg);
}
catch
{
bufferPool.CheckIn(SocketEventArg);
argsPool.CheckIn(SocketEventArg);
throw new SocketException((int)SocketEventArg.SocketError);
}
}
大牛们帮忙,通信这块初学者,在线等待
...全文
521 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯狂的犹太人 2013-09-23
  • 打赏
  • 举报
回复
引用 1 楼 ycg_893 的回复:
bool IsHadle = ServerSocket.AcceptAsync(SocketEventArg); 如果 IsHadle == false 时,是不会发生 SocketEventArg.Completed 事件的。 所以需要如下

if(!IsHadle)
{
  OnAccept(SocketAsyncEventArgs e); //此函数为接受函数,也是 Completed 事件需要调用的函数(e.LastOperation == SocketAsyncOperation.Accept)
}
另外,即使你修改此处,你的服务器也只会接受第一次,因你的代码不对,异步每接受完一次连接需要放入再次接受。网上代码很多的。
bool IsHadle = ServerSocket.AcceptAsync(SocketEventArg); IsHandle值是true,证明它就是异步处理,由于处理在Completed事件里面写着,目前代码里不能触发Completed事件
ycg_893 2013-09-22
  • 打赏
  • 举报
回复
bool IsHadle = ServerSocket.AcceptAsync(SocketEventArg); 如果 IsHadle == false 时,是不会发生 SocketEventArg.Completed 事件的。 所以需要如下

if(!IsHadle)
{
  OnAccept(SocketAsyncEventArgs e); //此函数为接受函数,也是 Completed 事件需要调用的函数(e.LastOperation == SocketAsyncOperation.Accept)
}
另外,即使你修改此处,你的服务器也只会接受第一次,因你的代码不对,异步每接受完一次连接需要放入再次接受。网上代码很多的。

110,536

社区成员

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

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

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