gpt4 book ai didi

java - 通过 Java TCP 套接字发送任意长的字符串

转载 作者:可可西里 更新时间:2023-11-01 02:55:46 25 4
gpt4 key购买 nike

我有一个 Android 应用程序,它通过 TCP 套接字与我编写的服务器进行通信。我现在使用的读取和写入输出的方法适用于较小的字符串(最多 60kB),但当字符串比这长得多时,我会抛出异常。这是我对服务器和客户端的相关部分:

服务器:

            DataInputStream dis = null;
DataOutputStream dos = null;

try {
dis = new DataInputStream(server.getInputStream());
dos = new DataOutputStream(server.getOutputStream());

String input = "";
input = dis.readUTF();
handle_input info = new handle_input(input, id);
String xml = info.handle();

dos.writeUTF(xml);

server.close();

}

客户:

        Socket socket = null; 
DataOutputStream dos = null;
DataInputStream dis = null;
Boolean result;

try {
socket = new Socket(ip, port);
dos = new DataOutputStream(socket.getOutputStream());
dis = new DataInputStream(socket.getInputStream());
dos.writeUTF(the_text);
String in = "";
while (in.equals("")) {
in += dis.readUTF();
}
}

我如何修改它以处理潜在的巨大字符串?我一直在四处寻找,似乎找不到明确的答案。

谢谢。

最佳答案

如果您查看 javadoc对于writeUTF(),很明显该方法只能处理最多65535 个编​​码字节的字符串。 (编码形式以给出字符串字节数的 2 个字节开始)。

您的选择是:

  • 将字符串作为使用 String.toCharArray() 提取的字符数组发送,
  • 使用 String.getBytes("UTF-8") 显式地对字符串进行 UTF8 编码并发送生成的字节,或者
  • 将其拆分为更小的子字符串,使用 writeUTF8 发送它们,然后在另一端将它们拼接回去。

所有这些都需要在实际数据之前加上一个计数,以告诉另一端有多少期望/读取。

另一种方法是使用 WriterReader 代替 DataOutputStreamDataInputStream< 以文本形式发送/接收数据.

关于java - 通过 Java TCP 套接字发送任意长的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13319179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com