聊天室(Socket)尝试中所遇到的问题

来源:互联网 发布:淘宝生e经的入口在哪里 编辑:程序博客网 时间:2024/05/22 10:35

首先,由于由于Socket的输入流以及输出流一旦关闭,Socket也会随之关闭,起先没注意到这一点,所以就各种报错。


后来又发觉在聊天室发送的数据在服务端根本收不到,输入到了控制台也看不到信息,后来才发觉Socket的输入和输出流是有带缓冲区的,把缓冲区的大小打印出来了,才发觉有9000多,而我在测试的时候可能只发送了一条信息,导致了误以为信息发送失败了。解决的办法也很简单,Socket有带设置缓冲区大小的方法,调用此方法进行合理设置就行。


再者,解决完上面的问题后,又发现读取还是有问题,信息还是照样读不出来,检查了一下读取的代码,发觉读取的时候用的是BufferedRead的readLine()方法,而我设计的聊天室暂时只监听了发送按钮,这样子就导致了一个问题,readLine()读取数据的时候是以结束标记或者换行符为准的,所以信息就一直堵在那里读不出来。


最后,上面的问题都解决后,程序也能正常运行了,不过看了下CPU的利用率发觉飚得老高了,重新看了一下代码,发觉在服务器端由于要一直检查有没有信息,所以放接受信息的代码放在一个while(true)的死循环内了,这样子即使是没有信息,也要一直跑while循环,cpu就大部分时间被占用了。解决办法就是每跑一次循环体就让处理信息的线程睡眠一下,睡眠时间最好是在500-1000,因为如果有信息的话,睡眠时间太久了的话,会导致信息的延迟。


总结了一下,发觉其实还有很多更好的方法去代替上面那一堆挫挫的东西,自己还是很烂啊,这样子的代码都不敢见人了。重新优化调整后再贴代码。

原创粉丝点击