2012-11-15 73 views
1

我有一個問題,我不知道如何在Java TCP套接字問題中進一步處理。就我們可以從互聯網獲得的信息而言,要獲得Java服務器端TCP服務器的客戶端通信的相當多的工作解決方案並不困難。但是,大多數示例都會讓它們的服務器監聽一個端口,然後循環直到它們獲得連接到服務器的客戶端,然後代碼將執行server.accept()並進一步移動。例如:Java TCP客戶機/服務器

public static void main(String[] args) throws IOException { 
    ServerSocket s = new ServerSocket(PORT); 
    System.out.println("Started: " + s); 
    try { 
     // Blocks until a connection occurs: 
     Socket socket = s.accept(); 
     try { 
     System.out.println("Connection accepted: "+ socket); 

如果客戶端連接到服務器,它將很好地工作。而且,我的問題是即使沒有客戶端連接到服務器,我也需要繼續其他一些過程。事實上,即使沒有客戶端連接到相同的端口和IP,我也需要啓動另一個JFrame才能繼續執行這些過程。但是,我一直在努力,但只要沒有客戶端連接到服務器,我的Java程序將掛起白色彈出JFrame。

我需要知道如何克服這一點,因爲我不太確定我的理解是否有錯誤。請協助和建議。謝謝!

最好的問候, 易英

回答

4

聽起來像是你需要做一個線程工作,同時等待另一網絡連接。檢查出threading tutorial。請注意,由於您正在使用Swing,因此您必須小心謹慎。哪個線程會修改你的JFrame等,你應該知道SwingWorker實用程序。

+0

+1 Brian說的。在一個線程中擁有接收器並在需要服務傳入連接時產生進一步的工作線程是一種常見模式。如果您需要速度,請考慮減少使用池創建線程的開銷。 – Faelkle

+0

謝謝大家,我按照Brian和John的建議分類了所有東西。我已經編寫了代碼來創建一個新的線程來監聽,而原始程序可以繼續運行。謝謝大家! – yi2ng2