用的是 tcp SOCKET,我写一个程序两个实例分别充当客户端和服务端,用select 模式来接受数据.  开了两个实例,第一个是开启服务端,第二个去连接服务端,服务端发送文件给客户端,文件有3M多,一次性发送过去,如果是直接运行的情况下,客户端能显示出收到的文件的字节数,并成功把数据写入磁盘文件,一次搞定。         后来我直接运行服务端,调试运行客户端,服务端给客户端发送文件,客户端在断点停下了,显示收到的文件字节数却只有10220 字节, 写入文件后,select模式会再次判断有数据到来,然后又去接受数据,    
问:    为什么调试状态下和直接运行程序收到的字节数会不一样?

解决方案 »

  1.   

    只要接收到的数据完整就可以了。分为几次收到或者发送,socket会根据当时的网络状况来决定的吧。
      

  2.   

    Debug环境和Release环境本来就有差别的,再加上你的Socket是基于本地运行调试的,所以网络状态肯定会比真实情况要好些的,而且网络程序在不同的网络环境里,发送和接收的状态难免会有差异,你只需要保证每次接收都处理得当,那么不管是一次完成还是多次接收,结果肯定都不会错的。
      

  3.   

    Debug模式和你直接运行是有些是不太一样的
      

  4.   

    to lijianli9:发送也会没发送完吗,我试了一次发送30M 都发出去了
      

  5.   

    关于缓冲区的大小,可以参考SO_MAX_MSG_SIZE的宏定义大小,当然,你可以针对socket用setsockopt进行修改,但一般设置也就几十KB吧.
      

  6.   

    socket默认缓冲区是8k,下断点之后,缓冲区中的数据被冲掉了吧