2012-03-09 30 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