У меня есть клиент-серверная программа в java, где клиент отправляет запрос на сервер, а сервер отвечает отправкой файла. Соединение с сервером установлено правильно, и первый запрос, отправленный клиентом, правильно интерпретируется сервером.
На этом этапе сервер считывает определенный файл c, который, кажется, хорошо читается, поскольку write отправляет правильное количество байтов и строку (проверяется с печатью количества байтов и строки).
После отправки первого сообщения клиент ожидает получения файла, но как только он получает сообщение, чтение возвращает -1, как если бы он прочитал EOF, и я не могу понять причину, как ее решить?
метод на сервере, когда отправить файл
private void sendFile(Socket client, String path, DataOutputStream writer) {
File file = new File(path);
byte[] bytes = new byte[1024];
InputStream in = null;
try {
in = new FileInputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int count;
try {
while ((count = in.read(bytes)) > 0) {
System.out.println("nBytes " + count);
String tmp = new String(bytes);
System.out.println(tmp);
//i'm reading from a json file this string
//[{"username":"user"},{"score":0},{"friendList":["us1","us2"]},{"password":"password"}]
//and it is printed correctly
writer.write(bytes, 0, count);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
метод на стороне клиента
public void getFile (String username) {
// first of all connects correctly with the server and sends a message, the message is received correctly by the server, after it waits for a reply message
Socket socket = connect2server();
DataInputStream reader = null;
BufferedWriter writer = null;
try {
reader = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//send message to the server using writer
OutputStream out = null;
String file = username+".json";
try {
out = new FileOutputStream(file);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
byte[] bytes = new byte[1024];
int count;
try {
while ((count = reader.read(bytes)) >= 0) {
System.out.println("nByte " + count);
out.write(bytes, 0, count);
}
// the client is waiting correctly on the read but as soon as it receives a message, the read returns -1 as if it had only read an EOF and not the whole message
System.out.println(count);
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
try {
out.close();
reader.close();
writer.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}