首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

最后的15分了,clientsocket连续发送的有关问题

2012-02-20 
最后的15分了,clientsocket连续发送的问题最近在改造老的项目,增加分包发送的代码,现在出现这个问题项目用

最后的15分了,clientsocket连续发送的问题
最近在改造老的项目,增加分包发送的代码,现在出现这个问题

项目用tclientsoet,tserversocket来搭建,非阻塞模式,这些都是固定的,没法变动

1.
将一个大的数据包,比如6000个字节,分为30个小包发送,用一个
while(...)
{
......
int p=clientsocket->sendbuf(....)//在这里检查p的值,都是正常的值,没有等于-1的
if(p==-1)
{
OutPutDebugString(....)
}

}
用上面的代码,基本上,在服务器上接受的时候,总会出现数据包验证不通过的问题,抓包,发现时乱码,如果再sendbuf后面加一个sleep(1),就正常了,为什么呢?senbuf返回值是正常的,没有为-1,为什么一定要加上sleep(1)呢?又没有出现发送错误


2.如果再服务器端处理的时候,客户端断开了连接,处理数据的过程中需要发送数据,在引用socket->handle的时候,会出现非法操作,如何避免这样的问题?如何判断?本来客户端断开,服务器端会收到一个消息,在这里做处理就可以了,但是,如果服务器端正在处理的时候断开,服务器端正在处理数据,等处理好了以后才会接受到断开的消息,怎么样能避免非法操作呢?



[解决办法]
有两点不明白:
1、6000个字节,如果是不可分隔的,为什么要分,一次性发过去就行了;
2、既然要分,必须保证服务端能正确区分每个包,因此,每个包应该加控制信息,例如:固定长度的包头+数据,接收时先接收包头,然后根据包头再接收数据,这样就不会乱。

热点排行