2014-12-02 22 views
0

我想以字節爲單位向java中的套接字服務器寫入字符串,然後接收答案(已知長度的字節)。在java中寫入python套接字服務器

我看了看周圍,有很多教程,但我似乎無法找到一個特定的函數來處理字節,並且,我似乎無法執行功能。這保持紅色下劃線。

import java.io.*; 
import java.net.Socket; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 


public class SocketTest { 

    public static void main(String [] args) throws IOException { 


     String hostName = "localhost"; 
     int portNumber = 10000; 

     try (

       //open a socket 
       Socket clientSocket = new Socket(hostName, portNumber); 


       BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
       PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); 


     ) { 

      System.out.print("Something went wrong"); 

     } 

} 


    try { 

     out.XXX; //can't seem to execute any function on this. 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

回答

1

首先要做的事情是:您正在濫用try-with-resources語句。

的語法是:

try (
    // declare and open resources here 
) { 
    // use these resources here 
} 
// resources are closed here, before you even try to... 
catch (SomeException e) { 
    // catch exceptions 
} 

然後,在Java中,你有OutputStream S和Writer S;第一個寫入字節,第二個寫入字符;如果一個Writer包裝OutputStream,那麼你需要指定charset,編碼器將從該charset創建出來,然後在「沿着電線」發送它之前將你的字符轉換爲字節。

以類似的方式,您有InputStream s和Reader s,它們具有相同的關係。

一般來說,如果您沒有指定用於Reader s或Writer s的字符集,則會使用默認值 - 這可能會或可能不會是UTF-8。

在代碼中,則:

  • 寫字節到第一個塊之後try;
  • 指定Charset用於您的ReaderWriter;
  • 如果您在寫入側使用緩衝,寫入後不要忘記.flush()(儘管關閉套接字將自動刷新)。

剩下的就是練習!

+0

非常感謝!嘗試錯誤的使用會讓錯誤檢查器混淆。我會嘗試作家的挑戰。 – dorien 2014-12-02 23:41:58