我在实际运用IOCP中发现一个这样的问题:client和server 当client 接收SERVER的WSASEND的(我用的512byte)数据时,当SERVER发送数据频率在150MS以上接收正常,但在150MS以下时,CLIENT 接收时间间隔发生了变化,接收到数据包(512BYTE)时间不固定,也就是说当SERVER发送数据包的频率为150MS 时CLIENT接收到包的时间有长有短,可能是200多MS才接收到第一个包,下一个包接收时间为2MS.当时觉得应该是粘包现象.做了以下设置:BOOL nodelay = 1;setsockopt (p->sock , IPPROTO_TCP , TCP_NODELAY , (char *)&nodelay , sizeof(nodelay));int sndBuf = 0;setsockopt (p->sock , SOL_SOCKET , SO_SNDBUF , (char *)&sndBuf , sizeof(sndBuf)); 同样存在这个现象;但是以下实验就令人不解了:在CLIENT 投递WSARECV时,同时client 以频率小于150MS向SERVER连续发送数据,这时client 接收数据正常了,也就是SERVER 投递WSARECV间隔150MS发送那么CLIENT也是间隔150MS能接收到,这是怎么回事呢?请高手指点;
客户端用一个普通的阻塞recv(...)就足够了,没必要搞那么复杂。
用在客户端,可能会把本来简单的问题搞复杂。即使再频繁的数据收发,
对于客户端来说,
它面向的只是一个服务器来进行收发。而服务器端则不同,
它面向成千上万的客户端连接,
所以需要高性能的IOCP。对于客户端来说,用IOCP有如“杀鸡用牛刀”。