ServerSocket的疑问(300分)

  • 主题发起人 主题发起人 netspur
  • 开始时间 开始时间
N

netspur

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如果要设计一个多客户端的server,如何实现类似Delphi的serversocket的onaccept和
onclientread的时间触发呢?
是不是
while(true){
serversocket.accept();
...
...
}
这样呢?
 
事件触发,你只要在相应的事件中编写代码就可以了,用 while 循环是错误的.
 
你问的问题太笼统!有很多方法可以实现你的需求,的delphi之所以设计成那种模式是因为它本身是事件
驱动的.Java可以用别的方式来实现,具体的请看socket的说明.
 
Delphi自己的本来就是支持多客户连接的,
也挺好用的,没有必要自己来写组件吧?
 
我的意思是用java来写socket程序,如何实现象delphi那样的时间触发功能啊。
 
同意only you
 
这个问题真是奇怪,时间触发最好的方式是实现 TimerTask 虚类,至于它和 Socket 是
没有什么关系的
 
我的意思是:
有一个ServerSocket在侦听,如果有客户端连上来,Delphi会触发onaccept事件,如果客户端
发信息过来,Delphi也会触发onclientread事件,在java下如何实现呢?
 
你弄清楚delphi是怎么实现这些事件触发的了么?
如果只是要设计一个多客户端的server,那跟这些消息触发没有太多关系,
因为java.io包里的所有的东西都是block型的,
也就是说你调用socket.accept(),那如果没有client连上来就会等待一直到有client连。
java.nio包里都是非block的。
我觉得你最好先看看apache的内部机制,用一个监视线程接受所有请求,由n多个工作线程处理请求。
while方法思路是正确的,apache的监视线程就是这么做的,而且也没有更好的方法了。
 
网上随便找找有一堆。
看看think in java吧。
jdk1.4的非阻塞式套接字提供了一个更为高效的方式,网上更是可以找到一堆。
虽然我看到的代码多少都有点问题,但要让你明白怎么做已经足够了。
 
用线程,每一个新连接用一个新的线程来处理。
 
多人接受答案了。
 
后退
顶部