500ms内需要接收7M左右的大数据网络包,用VC实现,需要怎样写接收端的程序?不甚感激!

解决方案 »

  1.   

    7MB/0.5s=14MB/s=112Mbit/s
    百兆网满足不了。
      

  2.   

    简单,满足网络条件的情况下,如果你只是针对于这一个条件(500ms接收7MB字节),那么只需要做如下操作即可:char *buf = NULL;
    int  index =0, pkt_len = 8 * 1024 * 1024;// 省略指针检查
    buf = new char[pkt_len];
    memset(buf, 0, pkt_len);while (TRUE)
    {
          int len = recv(buf + index,  pkt_len - index);  // 简化的接收API,仅仅为了说明流程
          index += len;
          
         if (index >= x)  // x为你设定的或者通过协议头所获取的包长度
         {
                 // do anything
                 //  你可以在这里做协议处理,也可以转到另一个缓冲区中通过worker来做协议处理
         }
    }
    以上步骤完全满足你所设定的场景要求
      

  3.   

    不需在特别的设置啊. 
    你只需要用TCP, 一边不停的发送, 一边不停的接收就能搞定.每次发送的数据大一点, 比如一次发送1M.
    然后, 最好不要有磁盘IO操作, 因为这个会比较慢.我们有千兆网下,  接收速度最高可达125MB/s    已经基本达到千兆极限.但有些电脑会因为网卡或者CPU的原因, 达不到.这么高, 但   30MB/s  --  50M/s  一般的电脑都能达到.你才14MB/s,  完全没有问题.
      

  4.   

    现在是程序是把一次读取的数据量设置为8000byte,循环读取,直到7M的数据全部读完,但是运行一个多小时后,会出现网络接收获取数据失败的现象,不知道该如何解决。
      

  5.   


    失败就要看失败原因,也不是所有的“失败”都是表示失败。
    比如异步socket返回-1,GetLasterror()返回10056,这并不表示失败,而仅仅是表示“你的请求我接受了,你安心的等待结果就好了”。 所以说要具体问题具体分析。另外就是“TCP的粘包”问题导致的读取数据问题,这个问题主要原因是coder们没有定义好“规则”或者定义好了“规则”,但是没有处理好“规则”。
      

  6.   

    使用VC编程,recv函数接收数据,返回值为-1,错误代码是10060
      

  7.   

    10060 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。任何收发两端速度不一致的通讯,都需要在它们之间使用一个足够大的FIFO缓冲区。
    对任何FIFO缓冲区的使用,都需要仔细考虑接收端接收时超时无数据和发送端发送时FIFO缓冲区已满这两种情况下该如何做。