第六章里面有些地方用了你自己先定义好的class,但是光盘里没有源码文件,只有class文件。如ServiceLocator,UserEvent etc.
是否可以给我啊
rick47@21cn.com
对socket是不是一定要读一次写一次这样交替进行?如果不是,第一章的TCPClient类可能有问题(25页),run()方法同时负责读写socket,如果messageList.removeReqFirst()方法读不到数据就会使线程停在这里,如果用户不再发数据了,线程就一直wait了,难道这样客户端也收不到任何数据了吗?作为聊天室用户不发数据了应该还可以看到其他用户发的数据。
你新提供的那个文件用JB打开后编译时出错的,就是少了上面这个咚咚。
是不是能提供这章例子完整的代码?
以便学习。谢谢。
这个聊天室设计原理是,其它用户都是通过Server进行彼此通讯,因此,一个客户端只要监听来自服务器的消息就可以,没有就等待在那里。客户端之间不直接通讯,如果你需要,可以增加这个功能。
多谢kofboy仔细阅读。
WRITE事件事件是在你告诉Selector需要监听Write事件了,并且你向Socket写数据时出发。
这个聊天室设计原理是,其它用户都是通过Server进行彼此通讯,因此,一个客户端只要监听来自服务器的消息就可以,没有就等待在那里。客户端之间不直接通讯,如果你需要,可以增加这个功能。
1。向socket写时触发?既然已经写了触发后还能干什么呢?再写一次?
2。我知道这个聊天客户端是只和server通讯,但是removeReqFirst()会使线程等待(不是你说的等待来自服务器消息,而是等待用户输入),如果客户段不再输入数据到消息列表,那这个线程就永远不会唤醒吗?就是说某个用户在聊天室不发言就看不到任何东西了?
而且这里也不是你说的监测与服务器通讯的数据,这个Queue只是监测客户段的输入,main()线程模拟用户输入了100条消息,并且放到Queue里,TCPClient线程被唤醒把这100条消息发出去,发完100条后呢?这个线程发现Queue里没数据了就一直wait()下去,服务器发来的数据就完全不能处理了。你再好好看一下25页这个程序吧。如果作为客户段一定要发了数据后才能收数据,不发的时候就不能收,这也太不合理了吧。