【问题标题】:Read and write to TCP socket in Java在 Java 中读取和写入 TCP 套接字
【发布时间】:2022-01-25 15:27:49
【问题描述】:

我正在用 java 中创建一个接受客户端的简单 TCP 服务器。每个连接到服务器的客户端都会发送一条消息,并根据该消息发送一个应答。

为了接受客户,我使用ServerSocket 类。为了阅读客户的消息并写信给他,我只能在SocketDataOutputStreamDataInputStream 类以及StandardCharsets.UTF_8 中使用。此外,服务器获取和发送的每条消息都必须采用 UTF-8 编码。

但是,我不确定如何使用这些类以 UTF-8 编码读取和写入消息。消息的大小是无限的。我试图阅读 DataInputStream 类的 read 函数,但我不明白如何使用它(如果这确实是我需要使用的函数)。

【问题讨论】:

    标签: java sockets tcp


    【解决方案1】:

    DataOutputStream 有一个writeUTF() 方法,DataInputStream 有一个readUTF() 方法。请注意,这些方法处理 modified UTF-8 而不是 标准 UTF-8,它们将 UTF-8 数据限制为最大 65535 字节。

    要提供与非 Java 客户端的互操作性和/或处理更长的字符串,最好自己手动处理 UTF-8。

    发送者可以使用String.getBytes()String编码为byte[]数组,使用StandardCharsets.UTF_8,然后使用DataOutputStream.writeInt()发送数组的长度,最后使用DataOutputStream.write(byte[])发送实际字节。

    然后接收方可以使用DataInputStream.readInt()读取数组长度,然后分配一个byte[]数组并使用DataInputStream.readFully()读取它,最后使用String构造函数使用StandardCharsets.UTF_8解码字节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 1970-01-01
      • 2011-01-09
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多