我已经实现了一个异步套接字连接,并让它成功地与客户端通信。我目前遇到的问题是,当使用独立于定义的协议的计时器向客户端发送数据包时。
每次调用SAEA.AcceptSocket.SendAsync(...)时,我都会得到一个异常: System.InvalidOperationException:“使用这个SocketAsyncEventArgs实例的异步套接字操作已经在进行中。”
我做了一些测试,似乎不能一个接一个地调用SAEA.AcceptSocket.SendAsync(...)。这是SAEA设计的方式,还是我在代码中做错了导致异常被引发的错误?
我花了一些时间搜索这个,但似乎找不到任何答案。如果有人能帮助我,或至少指出我的正确方向,那将是非常感谢的!
谢谢!
发布于 2011-05-04 08:36:25
每个SocketAsyncEventArgs实例只能有一个操作挂起。您要么需要等待当前挂起的操作完成,要么只需在每次发送时使用唯一的SocketAsyncEventArgs实例。
发布于 2011-05-04 08:15:12
每次发送消息时,它都会尝试发送或等待超时或错误。
发生在您身上的可能是您仍然在处理前面的消息,并且尝试使用相同的SocketAsyncEventArgs再次发送。如果SocketAsyncEventArgs正在等待下一个进程,通过请求它转到另一个进程,您将得到这个错误。
因此,如果侦听器是服务器,当客户端尝试发送时,我建议您执行一个新连接并为它创建一个新的SocketAsyncEventArgs。
发布于 2011-05-04 07:48:51
我想你得打电话给SAEA.AcceptSocket.EndAccept(.)首先结束异步连接进程或SAEA.AcceptSocket.EndSend(.)以结束上一次发送
https://stackoverflow.com/questions/5880179
复制相似问题