2012-03-09 46 views
1

我有一个客户端,将通过套接字连接到服务器。连接服务器上发生的每个事件后,都会发送给所有注册的客户端。Java套接字事件驱动

每个客户都应该收到有关该事件的数据。

我只需要实现客户端......这意味着我需要连接到服务器并接收事件的数据。

我想在做这样的事情:

this.socket = new Socket(InetAddress.getByName(host), 
this.socket.connect(socket.getLocalSocketAddress(), SOCKET_TIMEOUT); 

,然后启动一个线程,其获取插座的InputStream在while循环。

但我不知道这是通过套接字实现事件驱动客户端的最佳方式。

是吗?

回答

0

这通常是通过产卵连续使阻塞调用从流中读取()客户端的独立线程中完成收到('事件触发'),然后回到阻塞等待下一个事件。

2

在事件驱动环境中,Datagram Socket会导致较低的网络开销,但不会提供可靠性。这里是关于编写数据报套接字客户端和服务器的tutorial。作为数据成为可用的read()调用疏导,可以在什么行为方式,尽快 -

0

您不一定需要一个线程,除非客户端必须响应其他一些输入,如GUI事件。然后,假设你正在谈论TCP,从套接字读取一个循环,缓冲接收到的数据,直到你有一个完整的应用程序“事件”,并调用你的应用程序“事件处理程序”。就这么简单。

+0

如果我不产生线程我的应用程序将阻止,对吧?我需要不断地阅读阻塞操作的套接字,还是我错了? Thx回复 – 2012-03-09 16:38:27

+2

是的,它会阻止读取套接字。这不是你想要的吗? Java中也有非阻塞IO framefork,请查看http://en.wikipedia.org/wiki/New_I/O – 2012-03-10 07:43:14