Java 服务器从客户端接收文件时出错?
我试图将一个文件从客户端发送到服务器,然后服务器响应客户端。服务器已收到文件,但客户端未收到响应 这是我的主代码和客户端代码:Java 服务器从客户端接收文件时出错?,java,sockets,Java,Sockets,我试图将一个文件从客户端发送到服务器,然后服务器响应客户端。服务器已收到文件,但客户端未收到响应 这是我的主代码和客户端代码: public static void main(String[] args) throws IOException { startServer(); startSender(); } public static void startSender() { (new Thread() { @Override publ
public static void main(String[] args) throws IOException {
startServer();
startSender();
}
public static void startSender() {
(new Thread() {
@Override
public void run() {
try {
Socket client = new Socket("localhost", 10000);
ObjectOutputStream oos = new ObjectOutputStream(client.getOutputStream());
ObjectInputStream ois = new ObjectInputStream(client.getInputStream());
//sent a file
FileInputStream fis = new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\constructor.jpg"));
byte[] buffer = new byte[1024];
int length = 0;
while((length = fis.read(buffer, 0, buffer.length)) > 0){
oos.write(buffer, 0, length);
oos.flush();
}
//response
String response = (String) ois.readObject();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}).start();
}
服务器:
public static void startServer() {
(new Thread() {
@Override
public void run() {
ServerSocket server = null;
Socket client = null;
ObjectInputStream ois = null;
ObjectOutputStream oos = null;
try {
server = new ServerSocket(10000);
client = server.accept();
System.out.println("Connected!");
ois = new ObjectInputStream(client.getInputStream());
oos = new ObjectOutputStream(client.getOutputStream());
//receive the file
FileOutputStream fos = new FileOutputStream(new File("E:\\Java\\server\\constructor1.jpg"));
byte[] sendBytes = new byte[1024];
while(true) {
int read =0;
read = ois.read(sendBytes);
if(read == -1)
break;
fos.write(sendBytes, 0, read);
fos.flush();
}
//response
oos.writeObject("true");
oos.flush();
} catch (IOException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}).start();
}
怎么了?您必须在ObjectInputStream之前创建ObjectOutputStream。见下文:
ObjectOutputStream oos = new ObjectOutputStream(client.getOutputStream());
ObjectInputStream ois = new ObjectInputStream(client.getInputStream());
这应该可以解决it输出测试的问题。您的接收器在流结束前一直在读取流,但发送方没有关闭套接字,因此流结束永远不会发生。您需要以某种方式更改发送协议:
- 在发送文件后关闭套接字以进行输出,但是您只能发送一个文件
- 在文件之前发送文件长度,在接收器处读取,然后在接收器处只精确读取那么多字节