Java-сокет получает файл, а затем отправляет ответ клиенту

У меня проблема, когда я устанавливаю сокет-сервер, и клиент может отправить мне файл, и я могу это получить. Но когда я пытался отправить 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 захвата

1 ответ

Нет. Но зачем ты это делаешь? Ваш клиент отправляет данные и после подтверждения (ACK) закрывает соединение. Он даже не будет читать данные, которые отправляет сервер. Вопрос в том, ожидает ли клиент данных? Кажется, что нет.

Другие вопросы по тегам