关于网友提出的“ IOCP模型客户端快速向服务端发送信息出现问题”问题疑问,本网通过在网上对“ IOCP模型客户端快速向服务端发送信息出现问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: IOCP模型客户端快速向服务端发送信息出现问题
描述:本帖最后由 VisualEleven 于 2010-09-17 18:51:53 编辑
客户端:
char buf[10]={0};
for(int i=0;i<100;i++)
{
::sprintf(buf,"%d",i);
int n=::send(sock,(char*)buf,10,0);
}
想服务端发送0-100个字符
服务端:收到后在服务端只能显示 0(只收到了一个)
我认为是不是发的太快服务端来不及接收所以做了如下更改:
客户端:
char buf[10]={0};
for(int i=0;i<100;i++)
{
::sprintf(buf,"%d",i);
Sleep(200);
int n=::send(sock,(char*)buf,10,0);
}
果然在服务端依次显示了0--100个字符?
为什么方法1无法只显示了收到的第一个字符?真的是因为发送太快的缘故吗?
解决方案1:
在每条连接开始的初期投递多个重叠IO,多线程监听IOCP端口并处理业务。最重要的是控制好你的内存
解决方案2: 我试了一下。
其实每次都是数据都收完整了,你可以printf("len=%d",len);的值,不出意外的话,方法一的len=1000;
方法一发送数据每次发送10个字节的数据,服务器端接收连接时只投递了一个读请求,缓冲足够大,由于发送的非常快,服务器端就会一次性接收完所有的数据。而printf("%s\n",perIO->buf);会之输出0是应为0后面试空字符。
方法二,客户端sleep了一下,这时服务器端在接收到一块数据后有足够的时间再去投递读请求。。
客户端改为char buf[10]={0};
for(int i=0;i<100;i++)
{
::sprintf(buf,"%4d",i);
int n=::send(m_socket,(char*)buf,4,0);
}
就OK了。。。
以上介绍了“ IOCP模型客户端快速向服务端发送信息出现问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2978851.html