文件传输后 Java Socket 消息不可读

标签 java sockets networking network-programming

我从一个套接字向另一个套接字发送了一个文件。之后我尝试发送一条简单的消息,但这不起作用。谁能告诉我为什么吗?

发送的文件和消息:

byte[] buffer = new byte[16384];
InputStream inputStream = new FileInputStream(f);
OutputStream outputStream = client.getOutputStream();
int len = 0;
while ((len = inputStream.read(buffer)) > 0) {
    outputStream.write(buffer, 0, len);
}
client.shutdownOutput();

//Following doesnt work:
PrintWriter m_out = new PrintWriter(outputStream);
m_out.println("anfrage erhalten");
m_out.flush();

接收文件和消息:

File pdfFile = new File("marke.pdf");
OutputStream fs = new FileOutputStream(pdfFile);

OutputStream os = client.getOutputStream();
InputStream is = client.getInputStream();

byte[] buffer = new byte[16384];
int len = 0;
while ((len = is.read(buffer)) != -1) {
    fs.write(buffer, 0, len);
}   
fs.flush();
fs.close();
client.shutdownOutput();

// Here i will receive the Message after the file transfer, but this doesnt work!
System.out.println(br.readLine());

最佳答案

您在关闭输出后正在向输出流写入消息玩具。这样做应该会得到一个 IOException 异常。

此外,在写入一些二进制数据后,您将使用相同的流来写入文本数据。如果这样做,您必须在另一端找到一种方法来知道二进制数据在哪里结束以及文本数据何时开始。如果您像现在一样读取字节直到流末尾,您将读取与文本数据字节连接的二进制数据。

关于文件传输后 Java Socket 消息不可读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7040568/

相关文章:

erlang - 无法打开多播套接字

python - 测试python中是否存在互联网连接

Java zlib解压错误 "unknown compression method"

java - 使用 Redis 和 DBMS 设计系统的最佳架构

c++ - getaddrinfo, AI_PASSIVE - 不同的行为 windows <-> linux

c - 使用套接字将数据包发送到另一个子网/网络

networking - 数据链路层的流量控制与传输层的流量控制

java - 在堆栈等资源有限的机器上无需递归即可创建数独矩阵

java - 如何在jsp、java和js代码中处理连续页面刷新

Python 类型错误 : an integer is required while working with Sockets