socket客户端接收处置方法,求高人指点
socket客户端接收处理方法,求高人指点
由于服务器连续向客户端发送数据,造成,客户端粘包等问题
由于我是新手,所以,处理上有问题,造成不能完全正确的接收
我的处理思路是这样的
1:程序运行后,开始socket接收线程
设置一个全局变量CString csa来接收数据,当socket,recv到数据时,将数据累加到csa上
2:程序运行后,开始数据折包线程,对全局变量CString csa进行折包处理,折包后,将数据写入到数据库
整程序就这么两个线程,线程没有使用互斥对象,事件,临界区.
程序结果:出现有部分数据不能接收或不能写入数据库
所以,我想重新写一种方法来处理接收的问题,至少要保证接收完整
我的预想是:
创建一个Map<int,char*> ss 来循环接收,
如:
::recv(sktclt, buffS, 4096, 0);
map[i]=buffS,
当i的值大于2000时,i重置为1
在开一个或多线程,来循环处理这个map对象
求高人指点,我的方法对吗,如果不对,你能告诉我,你的方法是怎么样的吗,谢谢了
,
------解决方案--------------------
你的定义数据包哦,一包一包来,例如一包4M数据。然后建立一个数据接收缓冲链,一个线程负责接收数据,一个线程负责处理数据。这样才能避免你处理数据据过久,导致网络溢出丢了数据。
由于服务器连续向客户端发送数据,造成,客户端粘包等问题
由于我是新手,所以,处理上有问题,造成不能完全正确的接收
我的处理思路是这样的
1:程序运行后,开始socket接收线程
设置一个全局变量CString csa来接收数据,当socket,recv到数据时,将数据累加到csa上
2:程序运行后,开始数据折包线程,对全局变量CString csa进行折包处理,折包后,将数据写入到数据库
整程序就这么两个线程,线程没有使用互斥对象,事件,临界区.
程序结果:出现有部分数据不能接收或不能写入数据库
所以,我想重新写一种方法来处理接收的问题,至少要保证接收完整
我的预想是:
创建一个Map<int,char*> ss 来循环接收,
如:
::recv(sktclt, buffS, 4096, 0);
map[i]=buffS,
当i的值大于2000时,i重置为1
在开一个或多线程,来循环处理这个map对象
求高人指点,我的方法对吗,如果不对,你能告诉我,你的方法是怎么样的吗,谢谢了
,
------解决方案--------------------
你的定义数据包哦,一包一包来,例如一包4M数据。然后建立一个数据接收缓冲链,一个线程负责接收数据,一个线程负责处理数据。这样才能避免你处理数据据过久,导致网络溢出丢了数据。