递增序列号udp套接字

时间:2013-11-30 07:45:17

标签: java sockets bit-manipulation

我正在实现UDP客户端 - 服务器程序的服务器端。我跟踪seq_num中的预期序列号,并计算sequence_number中数据报中收到的序列号。虽然seq_num和sequence_number的值打印为128,但程序在序列号超过127后不输入if(sequence_number == seq_num)条件。任何想法为什么会发生这种情况?代码段如下所示。

收到的数据包中的前四个字节包含序列号。将其与在se循环中递增的计数器seq_num进行比较。当seq_num达到128时,不输入if条件。

while(true){
     System.out.println("Waiting to receive packet");
    dg.receive(packet);
    buf = packet.getData();
    System.out.println("Received packet");
    Random rn =new Random();
    double p = rn.nextDouble();
    System.out.println(p);
    byte[] seqnumarray = new byte[4];
    for (int i=0; i<4 ; i++)
    {
        System.out.println(buf[i]);
        seqnumarray[i] = buf[i];
    }
    Integer sequence_number = java.nio.ByteBuffer.wrap(seqnumarray).getInt();
    System.out.println("seq num received is "+sequence_number);
    if (p > prob)
    {
        System.out.println("seq_num is " + seq_num);
        System.out.println("sequence_number is " + sequence_number);
        if(seq_num == sequence_number){

谢谢!

1 个答案:

答案 0 :(得分:2)

您正在使用Integer包装器类而不是int原语(实际上是ByteBuffer.getInt()返回的原语),并且适用于引用和值相等的标准Java规则。作为优化,运行时将Integer值-128实际调整为127,因此使用==偶然使用这些值,但对于一般情况,您需要使用equals。更好的是,只需使用普通int