2011-01-23 157 views
2

任何人都可以通過我通過TCP發送的Ascii味精的例子嗎?(無法找到例如在網絡上)Ascii碼的TCP套接字

感謝,

射線。

+3

它幾乎是不可思議的,你找不到*在WWW任何*例如:http://下載。 oracle.com/javase/tutorial/networking/index.html –

回答

1

Here's an example寫入和讀取回應服務器。

簡化摘錄:

Socket echoSocket = null; 
    PrintWriter out = null; 
    BufferedReader in = null; 

    try { 
     echoSocket = new Socket("taranis", 7); 
     out = new PrintWriter(echoSocket.getOutputStream(), true); 
     in = new BufferedReader(new InputStreamReader(
            echoSocket.getInputStream())); 
    } catch (UnknownHostException e) { 
     System.err.println("Don't know about host: taranis."); 
     System.exit(1); 
    } catch (IOException e) { 
     System.err.println("Couldn't get I/O for " 
          + "the connection to: taranis."); 
     System.exit(1); 
    } 

BufferedReader stdIn = new BufferedReader(
           new InputStreamReader(System.in)); 
String userInput; 

while ((userInput = stdIn.readLine()) != null) { 
    out.println(userInput); 
    System.out.println("echo: " + in.readLine()); 
} 
+0

他需要ASCII,任何閱讀器在這種情況下都是無用的,只是套接字的輸入/輸出流會做(不需要用'BufferedXXX'來包裝' – bestsss

+0

)爲我工作? – rayman

+1

我不同意bestsss這兩個參數。首先,使用閱讀器更安全(如果有一天他從ASCII切換到Unicode將不會有問題)。其次,使用緩衝讀取器對於速度是必要的(無需緩衝,由於持續輪詢插槽會浪費很多時間)。最後,兩者的結合是快速的,兼容unicode的,並提供了方便的方法(如readLine()而不是處理字節數組) – dagnelies

1

不知道,我想這應該工作:

try (DataOutputStream outToClient = new DataOutputStream(socket.getOutputStream())) { 
    outToClient.write(stringMessage.getBytes("US-ASCII")); 
} catch (IOException e) {} 
1

在原來的問題沒有說明是ASCII控制代碼是否有處理。

雖然接受的答案適用於打印 ASCII字符我有問題(在Windows 7企業版SP1)使用它包含ASCII控制代碼,尤其是含有任何的java的換行「字符」字符串的字符串,例如VT,CR,LF等。解決方法是將字符串作爲字節發送並將其轉換回遠端的字符串。

查看我對這個問題的回答,瞭解如何處理這種情況。

Reading Lines and byte[] from input stream

和我密切相關的問題,它是公認的答案:

Need TCPIP client that blocks until a specific character sequence is received