2011-11-26 93 views
0

我面對小困難,我的Java服務器,基本上它的工作原理,但只有一條線路,當我加入另一個不發送,這裏是服務器的代碼片段:我的服務器有什麼問題?

in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
out = new PrintWriter(socket.getOutputStream(), true); 
if (toSend.length() != 0) { 
    out.print(toSend); 
    out.flush(); 
    System.out.println("connected"); 
    toSend.setLength(0); 
    changeStatusTS(NULL, true); 
} 
if (in.ready()) { 
    s = in.readLine(); 
    if ((s != null) && (s.length() != 0)) { 
     appendToChatBox("INCOMING: " + s + "\n"); 
     if (s.equals("51789181 19426953") == true) { 

      out.println(ms.lister().toString().replace('[', ' ').replace(']', ' ').trim().replace(',', ' ') + "" + '\n'); 
      out.println(ms.topicDesc().toString().replace('[', ' ').replace(']', ' ').trim().replace(',', ' ') + "" + '\n'); 
      out.flush(); 

     } 
    } 
} 

和接收部:

clientSocket = new Socket("10.0.2.2", 1234); 
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); 
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
sentenceX = "" + point.getLatitudeE6(); 
sentenceY = "" + point.getLongitudeE6(); 
outToServer.writeBytes(sentenceX + " " + sentenceY + '\n'); 

String interesting = inFromServer.readLine(); 
String[] holder = interesting.split("\\s+"); 

String title = inFromServer.readLine(); 
String[] titleHolder = title.split("\\s+"); 

達爾維克顯示器正在打印作爲誤差:

TCP Error: java.lang.ArrayIndexOutOfBoundsException 

的程序工作,但它不接收第二out.println();

+4

仔細查看ArrayIndexOutOfBoundsException發生的行(堆棧跟蹤會告訴您在哪一行它發生哪個源文件的代碼)。你正在訪問一個有無效索引的數組。找出索引無效的原因。添加一些日誌語句,以確定它在做什麼。 – Jesper

回答

0

只是一個猜測:第二個inFromServer.readLine()電話可能太快。第二個數據包此時可能不會被髮送/接收......也許檢查字符串是否爲ready()可能是個好主意

+0

如果字符串沒有準備好,該怎麼辦? – iie

+1

也許你只需要檢查'inFromServer.readLine()'是否返回NULL ...... – xmoex