您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> VC/MFC >> IOCP模型客户端快速向服务端发送信息出现问题

IOCP模型客户端快速向服务端发送信息出现问题

来源:网络整理     时间:2016/7/28 3:52:26     关键词:

关于网友提出的“ 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:

引用 12 楼 iorsafeqq22 的回复:
引用 10 楼 zhen3feng 的回复:
处理大吞吐量义务时应该在连接建立后抛出5个左右的重叠IO,不然服务器处理完一个IO之后才能投递另一个IO,这样在大吞吐量情况下通信底层的缓冲区会被占满而丢失后面来的网络数据。
看了你上面的代码,你这个iocp模型跟其他的通信模型效率差不多,甚至还比不上其他的通信模型。
哦这些都是题外话了,至于你出现的问题,应该是你发送时或者是打印时的问题。你这份……

在每条连接开始的初期投递多个重叠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

相关图片

相关文章