我有两个文件:聊天服务器和聊天客户端。聊天客户端应该说它想要将文件上传到服务器。然后就上传了。但是,现在,所有消息都已正确发送/接收,但是当我尝试进行文件传输时,我得到的唯一结果是一个 0 字节的文件(位于我在服务器类内部指定的路径中) .
chatclient 类的损坏部分:
/**
* Sends a broadcast to the server
*/
public static void broadcast() throws IOException {
if (UserInput.getText() == "/upload") {
File myFile = new File (FILE_TO_SEND);
byte [] mybytearray = new byte [(int)myFile.length()];
fis = new FileInputStream(myFile);
bis = new BufferedInputStream(fis);
bis.read(mybytearray,0,mybytearray.length);
os = Socket.getOutputStream();
System.out.println("Sending " + FILE_TO_SEND + "(" + mybytearray.length + " bytes)");
os.write(mybytearray,0,mybytearray.length);
os.flush();
System.out.println("Done.");
}
System.out.println("" + UserInput.getText());
outputStream.println(UserInput.getText());
outputStream.flush();
}
服务器类的损坏部分:
if (input.contains("/upload")) {
byte [] mybytearray = new byte [FILE_SIZE];
InputStream is = csocket.getInputStream();
fos = new FileOutputStream(FILE_TO_RECEIVED);
bos = new BufferedOutputStream(fos);
bytesRead = is.read(mybytearray,0,mybytearray.length);
current = bytesRead;
do {
bytesRead = is.read(mybytearray, current, (mybytearray.length-current));
if (bytesRead >= 0) current += bytesRead;
}
while(bytesRead > -1);
bos.write(mybytearray, 0 , current);
bos.flush();
System.out.println("File " + FILE_TO_RECEIVED + " downloaded (" + current + " bytes read)");
}
最佳答案
你的复制循环是胡说八道。 Java 中复制流的规范方法如下:
while ((count = in.read(buffer)) > 0)
{
out.write(buffer, 0, count);
}
其中“count”是一个 int,“buffer”是一个长度 > 0 的 byte[] 数组。我通常使用 8192。
关于java - 无法让我的 Java 服务器接受来自客户端的文件传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23149828/