我写了一个socket服务端和客户端,客户端是个多线程向服务端发送数据,数据比较大。客户端每个线程循环发送一个字符串,服务端要求把接受到的字符串打印在屏幕上(是pringln()),但刚运行一会,服务端的字符串就是连着打印了,并没有换行,还有到后来还出现丢失字符的情况。如果我在客户端没发送一个字符串后就Thread.sleep(1),就不会出现上述的情况。所以,我估计是缓冲区的问题,请求各位大侠如何解决啊。
调试欢乐多
大概处理的方式就是一旦buffer..(..int size )的Size超过了size,就清空缓冲区,在回调!
设计一个队列每一个接收的线程都把数据往队尾添加,
添加方法进行同步,(注意考虑队列满时怎么处理的情况),或者用线程安全性的容器对象也可以。
写的时候 判断队列是否为空,如果不为空则等一会儿再检查。
(当然你也可以调用队列对象的wait和notify方法来进行同步,
但我觉得没有必要)
建议楼主把send()方法用synchronize同步,同一时间只有一个线程在发送信息。这样就能避免冲突了,还有readline()在读取时,“\r\n”会被忽略掉。