2014-02-12 78 views
0

我正在開發適用於Android的客戶端應用程序。當它通過套接字連接到服務器時,它會發送一條消息。問題是,即使它是相同的,它仍然繼續發送消息。客戶端一次又一次發送相同的消息

這是我迄今使用的代碼。

public class ClientThread implements Runnable { 

    public void run() { 
     try { 
      InetAddress serverAddr = InetAddress.getByName(serverIpAddress); 
      Log.d("ClientActivity", "C: Connecting..."); 
      socket = new Socket(serverAddr, SERVERPORT); 
      connected = true; 
      while (connected) { 
       try { 
        Log.d("ClientActivity", "C: Sending command."); 
        PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket 
           .getOutputStream())), true); 
         out.println(sendMsg.getText().toString()); 
         out.flush(); 
         Log.d("ClientActivity", "C: Sent."); 

       } catch (Exception e) { 
        Log.e("ClientActivity", "S: Error!", e); 
       } 
      } 
      //Log.d("ClientActivity", "C: Closed."); 
     } catch (Exception e) { 
      Log.e("ClientActivity", "C: Error", e); 
      connected = false; 
     } 
    } 
} 

我試過添加這個if (out.toString()==sendMsg.getText().toString()){ connected=false; out.flush(); };但結果仍然是一樣的。 如何才能讓它發送消息只有當它不同於以前的。

回答

1

你需要用equals();

變化==equals();

if (out.toString().equals(sendMsg.getText().toString())) 
{ 
connected=false; out.flush(); 

}; 
0

您的while循環的缺陷比較字符串。

沒有條件,連接到假的設置,所以它永遠是一個。

出於好奇:是否有一個原因,你正在做一個套接字連接,而不是http或https?

+0

不,我剛開始學習套接字。 我有條件,但它不能正常工作。 – WWJD

+0

如果我可能會給你一些建議:除非你真的需要知道套接字,否則你不需要知道套接字的任何內容。無論你想要完成什麼,你都應該可以使用http或https連接。 Android爲這種通信提供了TON類。如果你在同一時間建立服務器,那麼你可以輕鬆地支持這些連接,安全性大約高出十億倍。 – cbrulak

+0

感謝您的建議。我將檢查http/https連接。只是爲了完成這個項目。 – WWJD

相關問題