簡體   English   中英

Java TCP偵聽器循環

[英]Java TCP Listener loop

我一直在Google上搜索幾個小時,因為我知道這是我面臨的一個非常簡單的問題,但是我找不到解決這個問題的簡單方法。

我正在寫一個非常基本的IRC客戶端,只是為了重新學習Java的精髓,因為我做過任何編碼都已經很長時間了,並且我有一個以后要做的項目。

雖然我被套接字偵聽器所困擾,但是我可以根據需要提供代碼,但是我真正需要的是關於如何創建一個循環的簡單教程,該循環可以偵聽和創建套接字,並在接收到任何數據后立即執行操作。 此循環應繼續進行,直到關閉套接字(用戶與服務器斷開連接)為止

我當前代碼的問題是,偵聽器似乎會在收到數據之前掛起整個程序。 我什至在單獨的線程中放置了一個while循環,因此它可以掛起該線程,直到數據到達為止,但仍掛起整個程序。

我不想被告知答案,我想知道如何找到答案。 我什至考慮創建一個事件驅動的偵聽器,但是對於我所需要的來說,這似乎過於復雜。

我希望不必發布代碼,因為在進行所有嘗試以使其正常工作的所有編輯后,它一團糟,但這是到目前為止的內容:

ListenToServer.java:

class ListenToServer extends Thread{

JTextPane outputDestination = null;
Socket establishedSocket = null;

public void kickStartprep(Socket establishedSocket, JTextPane outputDestination){
    this.establishedSocket = establishedSocket;
    this.outputDestination = outputDestination;
}


@Override
public void run(){

    UpdateServerStatusWindow("Thread is running!", outputDestination);


    BufferedReader inFromServer = null;

  try{
  inFromServer = new BufferedReader(new InputStreamReader(establishedSocket.getInputStream()));

      while (inFromServer.readLine().isEmpty() == false){
        UpdateServerStatusWindow(inFromServer.readLine(), outputDestination);  
      }


  }
  catch (Exception e){
      UpdateServerStatusWindow(e.toString(), outputDestination);
  }
}


public void UpdateServerStatusWindow(String message, JTextPane destination){

    StyledDocument doc = destination.getStyledDocument();
    try
{
doc.insertString(doc.getLength(), '\n' + message, null);    
}
catch(Exception e){ 
    JOptionPane.showMessageDialog(null, "There was an error updating the server     message output window in the TCP Listner!");
    JOptionPane.showMessageDialog(null, e);

}

}
}

然后,我這樣調用:

MainGUI.java

 ListenToServer serverListener = new ListenToServer();
    serverListener.kickStartprep(establishedConnection, ServerMessageOutput);
    serverListener.run();

一個朋友看了看這段代碼,發現問題出在我調用線程的方式上。 基本上我需要打電話給:

serverListener.start();

代替

serverListener.run();

這已經解決了問題,並且我的IRC客戶端現在可以正確連接到服務器了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM