У меня проблема, когда я устанавливаю сервер сокетов, и клиент может отправить мне файл, и я могу это получить. Но когда я пытался отправить ACK-сообщение клиенту, он не может его получить.
dis = new DataInputStream(client.getInputStream());
File file = new File("D:/socket/files/");
if (!file.exists()) {
file.mkdir();
}
fos = new FileOutputStream(new File(filePath));
inputByte = new byte[1024];
System.out.println("Start to receive file");
while ((length = dis.read(inputByte, 0, inputByte.length)) > -1) {
String s = new String(inputByte,0,length);
fos.write(inputByte, 0, length);
fos.flush();
}
System.out.println("File Received Location: " + filePath);
OutputStream out = client.getOutputStream();
PrintWriter pw=new PrintWriter(out);
pw.write("hello");
pw.flush();
pw.close();
Это мой сервер, получающий и отправляющий код сообщения.Я использовал wireshark, чтобы найти, что после того, как клиент отправит мне данные, я автоматически отправлю сообщение [ACK] без какого-либо содержимого, затем клиент отправит мне [FIN, ACK], я мог бы отправить два сообщения обратно, одно - [ACK] идругой - [PSH, ACK].сообщение "привет" находится внутри пакета [PSH, ACK].Я думаю, причина в том, что когда клиент посылает мне [FIN, ACK], он уже закрыл соединение.Можно ли в любом случае добавить сообщение в первый пакет [ACK], который я отправлю обратно клиенту? wireshark-capture