我写了一个socket服务端和客户端,客户端是个多线程向服务端发送数据,数据比较大。客户端每个线程循环发送一个字符串,服务端要求把接受到的字符串打印在屏幕上(是pringln()),但刚运行一会,服务端的字符串就是连着打印了,并没有换行,还有到后来还出现丢失字符的情况。如果我在客户端没发送一个字符串后就Thread.sleep(1),就不会出现上述的情况。所以,我估计是缓冲区的问题,请求各位大侠如何解决啊。

解决方案 »

  1.   

    根据你所描述的情况,我认为你需要自定义一个异常,这个异常用于捕捉益处的发生!
    大概处理的方式就是一旦buffer..(..int size )的Size超过了size,就清空缓冲区,在回调!
      

  2.   

    设计缓冲的时候可以这么做,
    设计一个队列每一个接收的线程都把数据往队尾添加,
    添加方法进行同步,(注意考虑队列满时怎么处理的情况),或者用线程安全性的容器对象也可以。
    写的时候 判断队列是否为空,如果不为空则等一会儿再检查。
    (当然你也可以调用队列对象的wait和notify方法来进行同步,
    但我觉得没有必要)
      

  3.   

    用synchronize把线程同步,或判断数据是否产生或是否读取,调用wait和nitify方法。
      

  4.   

    BufferedReader类的readline()方法,当遇到缓冲区内被写入“\r\n”时,就刷新缓冲区,而flush()是强制刷新缓冲区。
    建议楼主把send()方法用synchronize同步,同一时间只有一个线程在发送信息。这样就能避免冲突了,还有readline()在读取时,“\r\n”会被忽略掉。