gpt4 book ai didi

java - 在套接字上写入大字符串时出错?

转载 作者:行者123 更新时间:2023-12-02 08:08:53 25 4
gpt4 key购买 nike

各位 friend 大家好,

我正在尝试通过套接字连接发送一个长字符串,但我将它们分为两部分,因此在执行过程时出现错误。

在客户端中我正在发送文件,

BufferedWriter bufferedOut = null;
BufferedReader in = null;
socket = new Socket("192.168.0.15",4444);
bufferedOut = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

bufferedOut.write(xmlInString, 0, xmlInString.length());

/**
* wait for response
*/

byte[] buf = new byte[10000];
int actualNumberOfBytesRead = socket.getInputStream().read(buf);
String responseLine = new String(buf, 0, actualNumberOfBytesRead);

在服务器中,

 BufferedReader in = null;
PrintWriter out = null;
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);

//get the input
byte[] buf = new byte[10000];
int actualNumberOfBytesRead = client.getInputStream().read(buf);
line = new String(buf, 0, actualNumberOfBytesRead);
//send back
out.println(result);

我如何才能将我的字符串作为一个部分?你能告诉我代码中的错误在哪里吗?

谢谢大家

最佳答案

您将需要一个循环来重复从输入流中读取数据,每次将读取的数据连接在一起,直到到达字符串末尾。

编辑 - 更多细节。如果您正在考虑传输多个此类字符串/文件,请参阅@arnaud 的答案。如果您只想发送 1 个大字符串,那么:

  1. 在发送方,创建输出流,发送数据(就像您所做的那样),然后不要忘记再次关闭流(这也将执行刷新,确保数据被发送并通知另一端没有更多数据了)。

  2. 在接收站点上,循环读取数据,直到输入流结束(read(buf) 返回 -1),每次在一个大缓冲区中将数据连接在一起,然后关闭输入流。

另外,请阅读我关于以字节而不是字符串形式发送文件的评论。这对于 XML 文件尤其重要,因为 XML 文件对于编码检测有相当特殊的规则。

关于java - 在套接字上写入大字符串时出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7742033/

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