伪代码如下
Server
while(true)
{
   recv(buf,..);
   if(buf=="end")
     {
        break;
      }
    else
     {  
       fwrite();
     }
}
Client
while(!feof(fp)
{   
     fread(buf,...);
     send(socket,..);
}
小文件可以完整接受,但大的文件就会小1-2k
怀疑是粘包或者是接收端部分数据没有接收到
麻烦各位给指点下

解决方案 »

  1.   

    recv(), send()请检查返回值。
      

  2.   

    1、你的buffer的大小是多少?
    2、大的文件是多大?
    3、什么要的网络条件,如果是局域网的话,丢包的可能性不大 ,你使用抓包软件抓包看看
    4、最好写个日志来进行分析。
      

  3.   

    搭一下便车,
    请问一下如何开发基于蓝牙的Winodws PC 程序与手机等设备传输数据:
       1、开发环境要求,Winsock是否可以满足了,与传统的网络编程有何区别,
       2、蓝牙各种协议栈是否会带来兼容性问题。。
       3、通过虚礼串口实现和通过Winsock实现比较谢谢!!!
      

  4.   

    文件读的没问题,buf为1k,5楼的接受数据缓冲区溢出怎么理解?
      

  5.   


    明白了,首先你的SEND没有重发和错误处理机制,其次,你对发送缓冲没有设置大小,致使发送过大时,累积几次可能造成发送的BUFFER BLOCK错误。
      

  6.   

    发送100k要休眠,但是这应该不是问题的原因吧。
    首先确认重发机制,然后,据说 不要使用feof,使用文件length判断是否发送完成。
      

  7.   


    正解 send函数,一定要判断,是否成功。当系统的缓存区被你塞满的时候,就会失败,你需要重新发,直到成功。send函数,并不是把数据直接发到对方,而是先发到系统缓存区,由操作系统负责真正发送,其它送速度跟网速,硬件环境有关。
      

  8.   

    tcp是字节流,因此要自行定义好应用层的协议,来标识数据流的开始和结束。
      

  9.   

    buf=="end" 这样判断好像非正常做法,也没试过,一般用strcmp等