正文

改写你的recv和send函数(TCP传输数据细节 二)2007-10-02 16:32:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bills/29792.html

分享到:

 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; //返回接收到的字节数
}

阅读(6489) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册