有人請給出一個服務器套接字的示例代碼,連接多個客戶端套接字並按順序處理它們,每個從它們讀取至多一條消息?服務器套接字,多客戶端,每個線1
對於閱讀部分,看來這掛起讀一個行後:
while ((fromClient = in.readLine()) != null) {
和閱讀任何東西在此之前掛起:
fromClient = in.readLine();
有人請給出一個服務器套接字的示例代碼,連接多個客戶端套接字並按順序處理它們,每個從它們讀取至多一條消息?服務器套接字,多客戶端,每個線1
對於閱讀部分,看來這掛起讀一個行後:
while ((fromClient = in.readLine()) != null) {
和閱讀任何東西在此之前掛起:
fromClient = in.readLine();
只要將您的while
更改爲if
即可。 readLine()
阻塞,直到完整的一行被讀取或對等方已關閉連接。如果這是阻止試圖閱讀一行,它會調用你奇怪的需求。如果一個客戶很慢,它會減慢整個系統。你確定你需要這樣做嗎?你知道你可以通過線程同時讀取所有的客戶端嗎?
我最終強迫自己多線程,因爲它確實是常態。有用。對不起其他人試圖滿足我的奇怪的要求:無論如何,這是思想的食物。 – Rooster
您是否嘗試過oracle的例子嗎?
說明: http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html
我認爲這個例子是1個服務器,1個客戶端。我有1個服務器,多個客戶端。他們也有這樣的例子,但是有多線程,而我不需要。 – Rooster
我想你想要的東西更像this。但是恐怕你需要將網絡邏輯從程序邏輯中分離出來。
也就是說,您需要使用java.nio
來實現此目的,因爲調用readLine()
將在讀取時阻塞,直到到達行的末尾。 (所以如果你想使用readLine()
,你需要每個客戶端有一個線程)
你可能不得不擴展這個例子來爲每個客戶端保留一個緩衝區並監視它的行尾。
使用'readLine()'只有在你知道你正在閱讀的信息是純文本的時候纔會起作用,並且會被換行符終止。 –