我在用Socket接收数据的过程中遇到一个问题在局域网中服务器端传过来的数据特别快,数据量也比较大(音频视频数据), 客户端处理不过来,造成了Read函数返回-1。我猜测可能和底层的缓冲区有关系,如果调用setReceiveBufferSize函数增大缓冲区就会好一点, 但是时间长了,缓冲区满又会出现相同的问题。请问是什么原因, 如何解决呢?

解决方案 »

  1.   

    原本我也用socket写了收发文件
    还用了分包拆包,加包头信息等网络传送的东西。最后我放弃了,虽然基础的功能实现了,不过性能还是和专业的没得比。
    现在传送东西我都是用现成的sftp之类的了
      

  2.   

    能否使用一边读一边flush一下呢
      

  3.   

    我倒是觉得跟socket read读取速度关系不大。看看能否从以下角度解决问题:
    1. 干脆使用ftp程序让客户将音频传送上来,你再去读取
    2. 如果不可以使用ftp,你的程序可否在读取的时候不要做任何处理,一边读一遍写硬盘,写完再进行处理分析?
      

  4.   

    应该是你写的程序有问题,客户端的InputStream读取的速度和服务端写的速度关系不大,read函数返回-1表示已经在当前帧下已经读完了所有数据