我有一個非常奇怪的問題,我的最後一招是在StackOverflow上詢問這個問題,所以請大家開放!閱讀Java服務器插座
這裏有兩個方案:
A.客戶:在Android手機上運行的Java客戶端。 B.服務器:運行在計算機上的Java服務器。
下面是兩個方案做:
客戶端發送服務器座標(字符串格式),每2毫秒(非常快),服務器必須讀取所有這些座標,客戶端發送。爲了實現這一點(假設服務器位於10.0.0.1並且正在監聽端口54321),服務器必須有一個套接字,通過它讀取所有傳入的信息。是的,它確實收到了所有的信息,但是,有一個問題!
現在,你有背後的故事背景,現在的問題是:
客戶端連接到服務器,一旦出現這種情況,它開始以極快的速率發送座標(以字符串格式) 。服務器確實獲得了所有消息,但除非客戶端已斷開連接,否則它不會停止讀取。我需要的是讓服務器按收到的每一條消息逐個讀取消息!
下面是我用從套接字讀取的代碼(這是針對服務器,它是在自己的線程):
while(true) {
try {
BufferedReader socketReader =
new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str = socketReader.readLine();
System.out.println("New Message: " + str);
socketReader.close();
} catch (IOException e) {
//Client disconnected
System.out.println("Client disconnected.");
break;
}
}
這是我從客戶端得到輸出(其中x和y是數字):
New Message: x,yx,yx,yx,yx,yx,yx,yx,yx,yx,yx,yx,yx,yx,yx,yx,yx,y...and so on
而且該文本僅在客戶端斷開連接後才顯示。我希望它顯示爲消息進來
只是爲了澄清,這是所需的輸出。
New Message: x,y
New Message: x,y
New Message: x,y
New Message: x,y
... and so on
如果這沒有任何用處的,這裏是寫插座的方法(此代碼是從客戶端)
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
while(running) {
writer = new PrintWriter(socket.getOutputStream(), true);
writer.write(x+","+y);
writer.flush();
}
所以,這一切的一切,我需要的是我的服務器讀取消息,因爲他們進來,而不是讀他們都在客戶端斷開連接後的同一時間。在C#中,我也寫了一個服務器,並且這個服務器正在讀取這個信息,但是在Java中,這並不能解決問題!
是不是有什麼問題?看來IOException發生了。 – kosa 2012-01-03 02:41:02