2014-12-02 29 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