各位大侠,问下VC下网络编程,服务器端UDP发送文件,不断循环发送数据,每次发送500个字节,直到文件发送完毕,客户端为什么只能接受大概前面的8K左右的数据,后面的都收不到,怎么回事儿,有好的解决办法吗?在循环体sendto语句后加Sleep(100)后,能完整接受,这不是根本的解决办法,速度慢的不行。

解决方案 »

  1.   

    很显然,是因为接收不过来导致了数据丢失,因为sleep以后就能完全接受了。
    如果你想传的更有保障,还是使用tcp协议传输吧。
    如果嫌慢,可以使用多线程来传输嘛!!!其他的估计也没什么好办法了!
      

  2.   

    把发送缓冲区设大点.如果windows下,设置1024*4。
    仅理论支持
      

  3.   

    UDP发送自己要定义发送包格式,发送完一个包后要有相应的应答包,当接收到应答包后再发送下一个包
      

  4.   

    发送文件用UDP而且还循环发送,你是不想发呢还是不想发呢。强烈建议你赶紧换TCP传。
      

  5.   

    各位帮我看下这个贴 谢谢啦http://topic.csdn.net/u/20111230/08/9289852f-cfbd-4649-8961-0455662e4ce9.html?19303
      

  6.   

    UDP发送自己要定义发送包格式,发送完一个包后要有相应的应答包,当接收到应答包后再发送下一个包
      

  7.   

    没错误,关键在udp是不可靠传输协议,发送的包如果接受端没来的及接受则包丢失。
    改进措施:自己设定发送协议,当接受端接收到包后再发送下个包。
    或者直接采用tcp协议,你的程序逻辑不用改。
      

  8.   

    各位大侠给我出谋划策,小弟谢了哈~
    我接着再调调看。
    另外我这个要求必须用UDP做,现在是在本地一台PC的127.0.0.1模拟服务器和客户端,UDP应该
    没那么脆弱,丢包肯定不是网络上的事儿,估计缓冲区的问题,不知道各位能不能给点儿详细的剖析,或者
    推荐本书啊,我觉得这个UDP只能接受前面8k是个普遍的问题,也是个经典的案例。
      

  9.   

    每发一个包Sleep(1)就行 
    这样也不影响速度 同时也不容易丢包
      

  10.   

    换种模式做为何不可?那要看你对数据可靠性的认可度,高则用tcp低则udp
      

  11.   

    想用UDP传文件的话,使用TFTP协议吧.
      

  12.   

    用UDP包肯定丢了或不完整在internet 中 得制定重发 和 确认机制 ,不过用tcp更好
      

  13.   

    文件传输如果不加控制处理用UDP好像不太合适,建议用tcp。tcp最好也要做下校验处理。
      

  14.   

    很显然,没建立自己的应答机制,你应该每sendto一次包,客户端给你个应答在发送第二个包,否则数据一大就接受不过来了