socket客户端在接受/发送的同时,如何接受服务端发过来的“其他通知消息”??
socket客户端采用MSDN上的异步阻塞的方式接受/发送数据,如下:
Socket socket = ...;
ManualResetEvent connectDone = new ManualResetEvent(false);
ManualResetEvent sendDone = new ManualResetEvent(false);
...............
socket.beginSend(.....);
sendDone.WaitOne();
socket.beginRecevie(.....);
receiveOne.WaitOne();
..................
socket.beginSend(.....);
sendDone.WaitOne();
socket.beginRecevie(.....);
receiveOne.WaitOne();
..................
(还有许多...)
基本上都是先send一个数据到服务端,然后receive一个服务端发过来数据(简单点,叫“应答消息”吧)。
同时,客户端还需要接受服务端发过来的“其他通知消息”,这些消息是服务端从发过来的通知,发送时机在服务端的发送序列中。
服务端程序c/c++编写在linux服务器下运行,协议已经定义好,协议/程序都可以更改。
根据协议,读取解析包头就能知道那些消息是“其他通知消息”而非“应答消息”。
那么,怎么样接受这些消息呢?
设想如下:
1、写一个reveivePeek方法,使用SocketFlags.Peek参数,然后再主程序中开一个线程,循环检查包头?---这样做会不会读到垃圾数据?如果主程序在正常的发送/接受的情况下?
2、把这些“其他通知消息”作为带外消息接受?使用SocketFlags.OutOfBand参数?这样可以吗?带外数据长度可以为多少?
3、或者其他的????
小弟初学socket,可能描述的不清楚,请各位高手指点,谢谢!!