您的位置:首页 > 其它

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

2015-08-30 10:38 225 查看

问题现象:

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

环境描述:

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));

数据包中的现象:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: