2012-09-19 75 views
1

我正在做客戶端服務器通信。我通過URLConnection類獲得了兩個連接。桌面客戶端Web服務器通信

現在我試圖向服務器發送登錄信息,服務器將檢查信息是否正確,否則它會要求我再次登錄,並且針對此方案假設登錄失敗。但是正從服務器的響應後,當我再次嘗試發送日誌信息我得到

java.net.ProtocolException: Cannot write output after reading input. 

這裏是我的代碼:

URL url = new URL(uniRL); 

java.net.URLConnection connection = url.openConnection(); 
connection.setAllowUserInteraction(true); 
connection.setDoOutput(true); 

while(true){ 
    System.out.println("Enter 1-login , 2-Exit"); 
useroption = input.nextLine(); 
numOption = Integer.parseInt(useroption); 
if(numOption == 1){ 
    OutputStreamWriter writer = new OutputStreamWriter(
      connection.getOutputStream()); 
    user_login = login(); 
    writer.write(user_login[0]+"@"); 
    writer.write(user_login[1]); 
    writer.flush(); 
    //out.close(); 
    BufferedReader in = new BufferedReader(
      new InputStreamReader(
        connection.getInputStream())); 
    while ((tempString = in.readLine()) != null) { 
     decodedString = tempString; 
     //System.out.println(decodedString); 
     //System.out.println(decodedString.equalsIgnoreCase("unknown user")); 
    } 
    in.close(); 
    if((decodedString.equalsIgnoreCase("unknown user"))){continue;} 
    else{break;} 
} 
+0

哪一行是您獲得此例外的地方?發佈異常跟蹤會有所幫助。 – Santosh

+0

當循環進行第二次迭代時,我收到異常。並嘗試第二次寫東西。 –

回答

0

當你調用in.close(),你實際上關閉使用的流通過URL連接。您需要再次撥打url.openConnection()重新打開信息流...

+0

兄弟感謝您的幫助,我嘗試了它沒有in.close()。它仍然沒有工作。我得到同樣的例外.... –

+0

我不知道你爲什麼選擇'URLConnection'來做到這一點,我可能會做一個直接的'Socket'連接,個人 – MadProgrammer

+0

你能給我一些很好的例子/鏈接在桌面(客戶端)和Web服務器上使用套接字?這將是非常有幫助的.. thankyou –