【问题标题】:Java Server - How to take input from InputStreamReader and convert to a String?Java Server - 如何从 InputStreamReader 获取输入并转换为字符串?
【发布时间】:2015-02-10 15:42:12
【问题描述】:

我正在尝试让一个非常简单的Client-Server 系统工作,其中Client 将向Server 发送一个字符串,然后server 将该字符串存储到一个文件中。

客户端通过以下方式发送字符串:

//Other Code

sockStrm = new DataOutputStream (clientSocket.getOutputStream ());

//Other code

sockStrm.writeChars (line);

//Other code

服务器接收到的字符串是:

//Other code 

strm = new BufferedReader (new InputStreamReader (clientSocket.getInputStream ())); 

//Other code

stringLine = strm.readLine (); 

//Other code

当我发送字符串STOP时,客户端的字符串长度为4,服务器端的字符串长度为9,显示为STOP

我尝试在服务器端对收到的字符串进行子串化,但没有成功。

关于如何处理这个问题的任何指示?

【问题讨论】:

    标签: java client server dataoutputstream inputstreamreader


    【解决方案1】:

    使用对称方法:

    DataOutputStream sockStrm =...
    sockStrm.writeUTF(str);
    

    DataInputStream sockStrm = ...
    String str = sockStrm.readUTF();
    

    writeChars 将单个字符写入两个字节值。读者按照编码从一个字节序列中重构出字符串,肯定不会按照每个字符的高字节-低字节进行编码。因此,您会得到一些零字节与原始低字节值的混搭,因此您仍然可以看到原始字符串值。 使用 \x00 表示 NULL 字节:

    S-T-O-P => on the line: \x00-S-\x00-T-\x00-O-\x00-P => prints as STOP
    

    对传入字符串的字符使用循环并显示它们的整数值 (str.charAt(i)) 以亲自查看上述内容。

    【讨论】:

      猜你喜欢
      • 2012-12-24
      • 1970-01-01
      • 2017-01-21
      • 2019-08-16
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多