2014-03-06 43 views
1

我正在構建一個客戶端/服務器應用程序,用於某些套接字編程練習。套接字編程。程序創建2個連接,而不是1個

以下是我的服務器類的構建+運行方法。服務器等待來自客戶端的響應,在這種情況下,這只是一個字符串。

問題是它似乎在客戶端響應時建立兩個連接。從我的打印語句中,我可以看到run方法中的所有代碼都運行了兩次,然後再次運行第一行。

爲什麼要dateServer.accept();只接受一個客戶端請求的連接?

public Server() throws Exception { 
    dateServer = new ServerSocket(3001); 
    System.out.println("Server lytter på port 3000."); 
    this.start(); 
} 


public void run() { 
    while (true) { 
     try { 
      System.out.println("waiting for client to request"); 
      Socket client = dateServer.accept(); 
      System.out.println("connection established"); 
      Connect c = new Connect(client); 
      clients.add(c); 
      this.sleep(5000); 
     } catch (Exception e) { 
     } 
    } 
} 

- 編輯 - 一個可與服務器(消息是一個簡單的「包裝」類「) 客戶端代碼:

System.out.println("Write to server:"); 
    String name = scanner.nextLine(); 
    Message message = new Message(name, null); 
    oos.writeObject(message); 
    oos.flush(); 
+0

向我們展示嘗試建立連接的客戶端代碼。由於某種原因它運行兩次? –

+0

我已經添加了客戶端的有趣代碼 – Anders

+0

它是一個客戶端試圖建立一個連接 – Anders

回答

1

如果所有的打印發生兩次,一定有兩個連接。第一行打印後再次因爲你是在一個循環中

NB:

  1. 從不忽略異常:特別是IOExceptions。
  2. 睡眠是完全沒有意義的。 accept()會在沒有傳入連接時阻塞。你真的在這裏浪費時間。
+0

睡眠只是試圖找出錯誤的原因。它應該被刪除是的。任何可能出錯的建議? – Anders

+0

服務器沒有問題。客戶端連接兩次,或者有另一個客戶端。 – EJP

+0

@Anders Put E.printStackTrace()在你的異常子句中,看看它是否拋出任何東西 – jrowe08

相關問題