我的场景是:服务端与客户端有一个长连接,服务端会异步发送数据给客户端,而客户端使用TcpClient用同步的方式与服务端通讯。服务异步给客户端发送后,我会调用了BeginReceive方法准备接收客户端数据,因为我需要往IAsyncResult参数传递一个【发送信息】(一个自定义类)。我的目的是在接收回调方法触发后可以取出【发送信息】。
现在的问题是,客户端会发送2次数据(2次加起来才是完整的一次通信数据)应答服务端。而2次触发的回调方法,第一次从IAsyncResult里面取不出【发送信息】,而第二次可以,这样子就不能完整的接收到数据(因为2次的IAsyncResult不是同一个引用了)。
求解。
IAsyncResult 的state数据给个标识吧,在服务器上存个字典记录下,两次信息合并后再做处理……
找不到原因,也只好这样子做