Java udp停止和等待确认不工作

Java udp停止和等待确认不工作,java,udp,Java,Udp,我正在尝试实现UDP停止和等待协议。我已经成功地让我的UDP发送方和接收方传输了一个图像文件。现在我正在尝试实现ACKs 当我的发送方完成发送数据包时,它会等待接收方发送ACK。一旦接收到来自发送方的数据包,接收方就发送ACK。 以下是发件人中等待确认的代码: 其中,seqNum是发送方刚刚发送给接收方的数据包编号,sendPacket是刚刚发送的数据包。我将此添加为一个参数,以防发送者需要重新发送它 private static void receiveACK(int seqNum, Data

我正在尝试实现UDP停止和等待协议。我已经成功地让我的UDP发送方和接收方传输了一个图像文件。现在我正在尝试实现ACKs

当我的发送方完成发送数据包时,它会等待接收方发送ACK。一旦接收到来自发送方的数据包,接收方就发送ACK。 以下是发件人中等待确认的代码: 其中,
seqNum
是发送方刚刚发送给接收方的数据包编号,
sendPacket
是刚刚发送的数据包。我将此添加为一个参数,以防发送者需要重新发送它

private static void receiveACK(int seqNum, DatagramPacket sendPacket) throws IOException {
        byte[] ack = new byte[2];
        boolean received = false;
        int recSeqNum = -1;
        ByteArrayInputStream bais = new ByteArrayInputStream(ack);
        DataInputStream dis = new DataInputStream(bais);
        DatagramPacket receivePacket = new DatagramPacket(ack, ack.length);
        while(!received) {
            try {
                clientSocket.setSoTimeout(50);
                clientSocket.receive(receivePacket);
                recSeqNum = dis.readShort();
                System.out.println("ACK: " + ack );
            } catch (SocketTimeoutException e) {
                System.out.println("Timed out: Still waiting for ACK");
            }
            System.out.println(recSeqNum);
            if(recSeqNum == seqNum) {
                received = true;
            } else {
                clientSocket.send(sendPacket);
            }
        }
    }
以下是接收器中发送ACK的代码:

private static void sendACK(int seqNum, InetAddress returnAddress) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(baos);
        dos.writeShort(seqNum);
        dos.flush();
        System.out.println("send: " + seqNum);
        byte[] sendArray = baos.toByteArray();
        DatagramPacket sendPacket = new DatagramPacket(sendArray, sendArray.length, returnAddress, port );
        receieverSocket.send(sendPacket);
    }
问题是,接收方只是不断尝试发送第一个数据包,而发送方只是超时


发送方和接收方都在同一台机器上。

wireshark中的流量是什么样子的?我使用的是Windows,有没有办法在Windows中的本地主机上使用wireshark?我没有专门尝试过,但如果它不起作用,我会非常惊讶。