2014-03-03 96 views
-1

我寫的代碼可以發送消息給服務器。問題是,如果我捕捉Wireshark的溝通,從我的應用程序發送我的字符串的消息是這樣的:Telnet按字符發送字符串

hello - 1 packet 

如果我檢查的Telnet發送相同的消息CMD端子消息是這樣的:

h  - 1 packet 
e  - 1 packet 
l  - 1 packet 
l  - 1 packet 
o  - 1 packet 

所以最後它逐個字符地發送整個字符串。服務器可以從cmd Telnet終端讀取消息並回復,但無法讀取從我的應用程序發送的消息。有什麼方法可以發送像這樣的字符串嗎?我不是編程服務器。我只編程客戶端,因此重要的是服務器必須能夠正確地讀取消息。非常感謝!

PrintWriter out; 
BufferedReader in; 

public void run() { 
       // TODO Auto-generated method stub 
       try { 
        InetAddress serverAddr = InetAddress.getByName(hostname); 

        // create a socket to make the connection with the server 
        socket = new Socket(serverAddr, port); 
        Log.i("Terminal", "Socket connecting"); 

        try { 

         // send the message to the server 
         out = new PrintWriter(
           new BufferedWriter(new OutputStreamWriter(
             socket.getOutputStream())), true); 

         Log.i("Terminal", "Connected."); 
         // receive the message which the server sends back 
         in = new BufferedReader(new InputStreamReader(
           socket.getInputStream())); 

        }catch... 
       }catch... 
} 

//send code 
public void sendMessage(String message) { 
     if (out != null && !out.checkError()) { 
      out.println(message); 
      out.flush(); 
      Log.i("Terminal", "Message sent."); 
     } 
} 
+1

請定義「無法讀取從我的一個發來的消息pplication」。服務器無法區分這兩種情況。你必須做一些其他的錯誤,例如不正確或不存在的行終止。 – EJP

回答

0

爲什麼不直接分別發送每個字符?

事情是這樣的:

public void sendMessage(String message) { 
    for (String ch : message.split("")) 
     sendPacket(ch); 
    sendPacket("\r\n"); 
} 

public void sendPacket(String payload) { 
    if (out != null && !out.checkError()) { 
     out.print(payload); 
     out.flush(); 
     Log.i("Terminal", "Message sent."); 
    } 
} 

你所說的一切工作正常,但如果你運行在與包在未來合併的問題,你可以通過添加此行來禁用Nagle算法:

socket.setTcpNoDelay(true); 

之後這一個:

socket = new Socket(serverAddr, port); 
+0

該代碼將單獨發送每個字符,但不會將所有字符串放在服務器端。像這樣:[link](http://clip2net.com/s/6Wsf4r) – Matwosk

+0

我修改了一下。在發送每個字符和一個換行符之前,現在它只在發送完所有字符後才發送一個換行符。現在嘗試一下,看看它是否有效。 –

+0

我覺得問題在於服務器端仍然收到只是字符和服務器不知道所有的字符一起形成一個消息。 – Matwosk

相關問題