码迷,mamicode.com
首页 > 其他好文 > 详细

服务器向客户端发送数据自动中断

时间:2015-08-30 11:25:16      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:作者qq 鸣人370905569   tcp   

问题现象:

客户端接收服务器端数据出现假死现象。

环境描述:

1.      客户端是window程序

2.      服务器端是Linux程序

3.      服务器端程序和客户端程序采用TCP进行通讯

问题分析:

1.      首先,客户端上进行抓包,对其数据包进行分析,发现服务器端发送的数据总是不完全

2.      其次,服务器上进行抓包,发现发送一会儿后,发送端的TCP窗口满了,导致数据溢出,发送的数据都是错误的数据包

3.      从服务器上的数据包分析发现,由于客户端处理速度过慢引起

解决问题的方法:

1.      提高客户端接收数据的速度,接收数据和处理数据进行异步处理。接收数据单独一个线程/进程,将接收到的数据直接进行分发到数据处理目标线程/进程;即,消息泵机制

2.      增加客户端接收数据的缓冲区

3.      增加服务器端发送数据的缓冲区

缓冲区设置:

//接收缓冲区

int nRecvBuf = 2<<20;  //设置为2M
setsockopt(s, SOL_SOCKET, SO_RCVBUF, (constchar*)&nRecvBuf, sizeof(int));
//发送缓冲区
int nSendBuf=2<<20; //设置为2M
setsockopt(s, SOL_SOCKET, SO_SNDBUF, (constchar*)&nSendBuf, sizeof(int));

数据包中的现象:

技术分享

版权声明:本文为博主原创文章,未经博主允许不得转载。

服务器向客户端发送数据自动中断

标签:作者qq 鸣人370905569   tcp   

原文地址:http://blog.csdn.net/wh8_2011/article/details/48102509

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!