萍聚社区-德国热线-德国实用信息网

 找回密码
 注册

微信登录

微信扫一扫,快速登录

查看: 1578|回复: 2

不知道算不算INFOR问题,请问TCP丢失字符流问题

[复制链接]
发表于 2008-4-17 10:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x
用TCP传一个包裹,分为5段传,可每段的开头都回丢失几个字符,有人知道为什么么
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-4-17 14:38 | 显示全部楼层
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; //返回接收到的字节数
}
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
 楼主| 发表于 2008-4-19 19:12 | 显示全部楼层
原帖由 shfaye 于 2008-4-17 14:38 发表
TCP是基于字节流的,你向send或者recv提交一个buffer,它不一定帮你发送或者接收完这个buffer的,所以你应该自己改写一下这两个函数,以便符合应用的需要,改写后姑且命名为TCPsend,TCPrecv

下面我改写后的这两个 ...

$支持$ $支持$ 我估计是BUFF的问题,谢谢了
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

手机版|Archiver|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网 |网站地图

GMT+2, 2024-4-30 01:38 , Processed in 6.874318 second(s), 20 queries , MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表