2017-03-07 34 views
-1

因此,我的問題是套接字連接時是否可以創建兩個引用1套接字輸入流的數據輸入流。我想打印出文本和文本2,但這不起作用。Java如何從客戶端多次使用傳入套接字

客戶端代碼

public static void main(String[] args) { 
    new Sender(); 
} 

public Sender() { 
    try { 
     Socket sock = new Socket("127.0.0.1",1337); 
     DataOutputStream out = new DataOutputStream(sock.getOutputStream()); 
     out.writeUTF("Test"); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

Server代碼

public static void main(String[] args) { 
    new Listen(); 
} 

public Listen() { 
    Thread thread = new Thread(this); 
    thread.start(); 
} 

@Override 
public void run() { 
    try { 
     ServerSocket serversocket = new ServerSocket(1337); 
     while(true) { 
     Socket socket = serversocket.accept(); 
     System.out.println(socket.getPort() + ": " + socket.getInetAddress().getHostAddress()); 
     DataInputStream input = new DataInputStream(socket.getInputStream()); 
     DataInputStream input2 = new DataInputStream(socket.getInputStream()); 
      String text = input.readUTF(); 
      String text2 = input2.readUTF(); 
      if(text != null) { 
      System.out.println(text); 
      } 
      if(text2 != null) { 
      System.out.println(text2); 
      } 
      //socket.close(); 
     } 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     System.out.println("Error"); 
    } 
+0

請張貼更多:一個最小的,可讀的和功能正常的代碼示例。這在所有內容上都很短 – efekctive

+0

我不認爲你提供的代碼與你所說的問題有關。您應該發佈服務器處理來自客戶端的連接請求的代碼部分。 – coolioasjulio

+0

我在一些較小的版本中更改了代碼,使其在我的意思中更清晰一點 – Rvdrichard

回答

0

你需要一個循環,上EOFException終止。不要寫這樣的代碼。取決於之前try塊中代碼成功的代碼應位於try塊內。

input = new DataInputStream(socket.getInputStream()); 
while(!formclosed) { 
    try { 
     String addtext = input.readUTF(); 
     addtext = formatText(addtext); 
     logarea.setText(logarea.getText() + addtext); 
    } catch (EOFException e) { 
     System.out.println("Client has disconnected."); 
     return; 
    } 
} 
// any other IOException should be treated as an error 

這應該作爲後臺線程運行,而不是當您按下按鈕時。

+0

該按鈕旨在打開新的JFrame,然後啓動新的後臺線程 – Rvdrichard

+0

接受服務器中的連接與GUI按鈕無關。它應該是自動的。 – EJP

+0

它已經被自動接受,然後按鈕點擊所有的按鈕,然後開始從套接字讀取這是一個壞主意? – Rvdrichard

相關問題