【问题标题】:Sockets and Streams in JavaJava 中的套接字和流
【发布时间】:2017-12-13 21:00:11
【问题描述】:

我已经构建了一个客户端-服务器应用程序,两者通过套接字和流进行通信。 我的服务器创建这些流:

this.out = new DataOutputStream(sock.getOutputStream());
this.in = new DataInputStream(sock.getInputStream());
this.bufread = new BufferedReader(newInputStreamReader(sock.getInputStream()));

然后像这样从 InputStream 中读取:

type = this.in.readByte();
String name = this.bufread.readLine();

最后,客户端像这样写入 OutputStream:

DataOutputStream out = new DataOutputStream(MyClient.getOutputStream());
out.writeByte(17);
out.writeBytes("value\n");

我正在从客户端发送字节,而服务器正在读取字节。如果我从客户端发送字符、整数或其他任何内容,它是否仍会从服务器读取为字节?使用的具体函数是否保证读取的数据类型?

【问题讨论】:

    标签: java sockets stream


    【解决方案1】:

    您不能将相同的 InputStream 包装在两个不同的对象(DataInputStream 和 InputStreamReader)中。彼此不了解,会互相干扰。

    将套接字的 InputStream 包装在 one 对象中。由于您需要读取原始字节,因此 DataInputStream 最有意义。

    您可能已经看到,您不能使用readLine method of DataInputStream,因为它已被弃用。 不要试图忽略该弃用并使用它;它被弃用是有原因的,即它不能正确处理字符。

    理想情况下,您应该改用readUTF 方法,但您必须确保服务器使用DataOutputStream.writeUTF 发送字符数据才能正常工作。

    【讨论】:

      猜你喜欢
      • 2013-05-21
      • 2013-03-17
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多