有关SocketAsyncEventArgs(SAEA)的问题

时间:2011-05-04 07:43:56

标签: c# sockets

我已经实现了异步套接字连接并使其与客户端成功通信。我目前遇到的问题是在独立于定义的协议的计时器上向客户端发送数据包。

每当我调用 SAEA.AcceptSocket.SendAsync(...)时,我都会收到异常: System.InvalidOperationException:“正在使用此SocketAsyncEventArgs实例进行异步套接字操作。”

我做了一些测试,似乎无法一个接一个地调用 SAEA.AcceptSocket.SendAsync(...)。这是SAEA的设计方式还是我在代码中做错了导致异常被引发?

我花了一些时间在Google上搜索,但似乎无法找到任何答案。如果有人可以帮助我,或至少指出我正确的方向,那就非常感激了!

谢谢!

3 个答案:

答案 0 :(得分:2)

每个SocketAsyncEventArgs实例只能挂起一个操作。您需要等待当前挂起的操作才能完成,或者只需在每次发送时使用SocketAsyncEventArgs的唯一实例。

答案 1 :(得分:1)

每次发送消息时,它都会尝试发送或等到超时或错误 您可能正在处理上一条消息,并尝试使用相同的SocketAsyncEventArgs再次发送。如果SocketAsyncEventArgs正在等待下一个进程,通过要求它转到另一个进程,你将收到此错误。

因此,如果监听器是服务器,当客户端尝试发送时,我建议你做一个新的连接并为它创建一个新的SocketAsyncEventArgs。

答案 2 :(得分:0)

我认为你必须先调用SAEA.AcceptSocket.EndAccept(...)来结束异步连接进程或SAEA.AcceptSocket.EndSend(...)来结束上一次发送