Java套接字消息isn';文件传输后不可读

Java套接字消息isn';文件传输后不可读,java,sockets,networking,network-programming,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(b

我将一个文件从一个套接字发送到另一个套接字。在此之后,我试图发送一个简单的消息,但这不起作用。有人能告诉我为什么吗

已发送文件和消息:

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());
接收文件和消息:

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


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

什么不起作用,有什么例外吗?我猜您在
clinet.shutdownOutput()
中关闭了客户端套接字,但这只是一个猜测……这里是:System.out.println(br.readLine());我应该收到“Anfrage erhalten”的信息。但是只有NULL,没有数据。没有关机也是一样,这只是一个从任何地方来解决我的问题,但它不工作。如果我在传输文件之前发送消息,它就会工作。您需要定义一个专用协议。一种方法是写入二进制数据的长度,然后是二进制数据,然后是文本数据。读取时,首先读取长度(n),然后读取二进制数据(n字节),然后读取文本数据。DataOutputStream和DataInputStream可能会有帮助。谢谢你,你知道一个网站或什么地方我可以找到这些东西的示例或教程吗?和