• 分片传输——send和recv函数


      最近在写socket编程收发数据,对于如何发送和接收大量数据,一直在思考。send和recv一般缓存区大小为4K,但是如果你要传输的数据超过了这个标准该如何做呢。

      我想到的就是如改写write和read函数一样,改写send和recv函数,使他们能分片传输这些大数据量的信息。

    int sock_send(SOCKET s,const char*buf,int len,int flags)
    {
     int n=0,ptr=0;
     int nLeft=len;
     if(buf==NULL)
      return 0;
     while(nLeft>0)
     {
      n=send(s,buf+ptr,nLeft,flags); //发送数据,
      if(n==SOCKET_ERROR)//网络出现异常
      {
       printf("Failed send(),error code:%d/n",WSAGetLastError());
       break;
       
      }
      nLeft-=n;
      ptr+=n; 
     }
    
     return sendCount; // 返回已发送的字节数
    }

    注意:在使用sock_send()函数时,一定要注意这样一种情况:(一定要+1,要不然就回出现乱码,就没有终止符)

    send(s,sendMessage,sizeof(sendMessage)+1,0)
    nt TCPrecv(SOCKET s,char *buf,int len,int flags)
    {
     
     int nRev=0,ptr=0;
     int nLeft=len;
    
     if(buf==NULL)
      return 0;
    
     while(nLeft>0)
     {
      nRev =recv(s,buf+ptr,length,flags);
      if(nRev==SOCKET_ERROR)
      {
       printf("Failed recv(),error code:%d/n",WSAGetLastError());
       break;
      }
      nLeft-=nRev;
      ptr+=nRev;
     }
    
     return recvCount;
    }
  • 相关阅读:
    BZOJ2243: [SDOI2011]染色
    BZOJ1036: [ZJOI2008]树的统计Count
    转自 x_x_的百度空间 搞ACM的你伤不起
    wcf test client
    wcf test client
    log4net编译后命名空间找不到的问题
    log4net编译后命名空间找不到的问题
    Hive Getting Started
    Hive Getting Started
    刚听完CSDN总裁蒋涛先生的学术报告
  • 原文地址:https://www.cnblogs.com/awy-blog/p/3396709.html
Copyright © 2020-2023  润新知