[英]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.