日期:2014-05-20  浏览次数:20848 次

求解关于socket编程中的ObjectOutputStream问题
大致是这样的:服务器-客户端的群聊程序,用ObjectIOStream来传递数据的时候,服务器上每个线程分管一个客户端,但是一个客户端的消息要转发给所有人就要用到连接了每个人的ObjectOutputStream,会出现【 java.io.StreamCorruptedException: invalid type code: AC异常】这个错误,google了一些资料说是因为ObjectOutputStream有锁,不能在一个线程里new 出多个ObjectOutputStream流,我应该怎么在每个服务器线程中完成消息对所有其他用户的转发呢?

因为本人是java新手,代码太乱了。。就不贴了。。。

【就是服务器上连接着A用户的线程怎么把A发来的消息转发给B,C,D,E,F的问题~~~~】

------解决方案--------------------
我也是新手,不对的地方指教
服务器不是每个线程分管一个客户端吗!直接用每个线程里的ObjectOutputStream转发,就不用new新的了,服务器新建线程的时候可以把线程存到MAP里,单聊就可以根据KEY(用户ID)取得相应的线程转发信息,群发的话就用MAP.values()取出全部的线程迭代,一个个转发;
------解决方案--------------------
群聊系统也是聊天系统,如果是我的话,我会先把消息发送到服务端,通过服务端转发给各个客户端。
具体:
当客户端向服务端发送Socket连接时,产生一个中间对象,拥有客户端和服务端的InputStream、OutputStream对象,并实现Runnable接口,然后把这个对象保存在服务端List中。
每次通过这个中间对象进行交流,服务端还可以从List中选择消息的发送对象。