不知道算不算INFOR问题,请问TCP丢失字符流问题
用TCP传一个包裹,分为5段传,可每段的开头都回丢失几个字符,有人知道为什么么 TCP是基于字节流的,你向send或者recv提交一个buffer,它不一定帮你发送或者接收完这个buffer的,所以你应该自己改写一下这两个函数,以便符合应用的需要,改写后姑且命名为TCPsend,TCPrecv下面我改写后的这两个函数的实现:
////////////////////////////////////////////////////////////////////////////////////////
int TCPsend(SOCKET s,const char*buf,int len,int flags)
{
int n=0,sendCount=0;
int length =len;
if(buf==NULL)
return 0;
while(length>0)
{
n=send(s,buf+sendCount,length,flags); //发送数据,
if(n==SOCKET_ERROR)//网络出现异常
{
printf("Failed send(),error code:%d\n",WSAGetLastError());
break;
}
length-=n;
sendCount+=n;
}
return sendCount; // 返回已发送的字节数
}
int TCPrecv(SOCKET s,char *buf,int len,int flags)
{
int nRev=0,recvCount=0;
int length =len;
if(buf==NULL)
return 0;
// 循环接收数据
while(length>0)
{
nRev =recv(s,buf+recvCount,length,flags);
if(nRev==SOCKET_ERROR)//网络出现异常
{
printf("Failed recv(),error code:%d\n",WSAGetLastError());
break;
}
length-=nRev;
recvCount+=nRev;
}
return recvCount; //返回接收到的字节数
} 原帖由 shfaye 于 2008-4-17 14:38 发表 http://www.dolc.de/forum/images/common/back.gif
TCP是基于字节流的,你向send或者recv提交一个buffer,它不一定帮你发送或者接收完这个buffer的,所以你应该自己改写一下这两个函数,以便符合应用的需要,改写后姑且命名为TCPsend,TCPrecv
下面我改写后的这两个 ...
$支持$ $支持$ 我估计是BUFF的问题,谢谢了
页:
[1]