gpt4 book ai didi

java - Java中如何通过Socket接收纯文本

转载 作者:太空宇宙 更新时间:2023-11-04 15:17:36 25 4
gpt4 key购买 nike

我试图通过Socket发送纯文本。所以我在 StackOverflow 中找到了一篇文章,我关注了它,我猜我写了但是,如何在客户端中接受纯文本作为字符串?我使用了 BufferedReader() 和 InputStreamReader() 类,但抛出了异常。

Exception : exception java.net.SocketException: Broken pipe

代码如下:
服务器:

OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream(), "UTF-8");
osw.write(fileName, 0, fileName.length());

客户:

InputStream in = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String fileName = br.readLine();
br.close();

一些帮助会很棒。 :) 谢谢。

客户端代码:

public void soc_client() throws Exception {
long time = System.currentTimeMillis();
long totalRecieved = 0;

try {
Socket sock = new Socket("172.16.27.106", 55000);
System.out.println("Hello Client");
InputStream in = sock.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String fileName = br.readLine();
File outputFile = new File(fileName + "");
br.close(); // CLOSING BufferedReader

FileOutputStream fileOutputStream = new FileOutputStream(outputFile);

byte[] buffer = new byte[100 * 1024];
int bytesRead = 0;

while ((bytesRead = in.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, bytesRead);
totalRecieved += bytesRead;
System.out.println("Recieved " + (totalRecieved / 1024)
+ " kilobytes in "
+ ((System.currentTimeMillis() - time) / 1000)
+ " seconds");
}
fileOutputStream.close();
sock.close();
} catch (Exception e) {
System.out.println("Exception " + e);
} finally {
System.out.println("Recieved " + totalRecieved + " bytes in "
+ (System.currentTimeMillis() - time) + "ms.");
}
}

最佳答案

您正在读取一行,但没有发送一行,并且也没有关闭 OutputWriter。因此,readLine() 将永远阻塞,等待行终止符或永远不会出现的 EOS。

  1. 在消息中添加换行符。
  2. 关闭OutputWriter。

关于java - Java中如何通过Socket接收纯文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20737753/

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