Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 递增序列号udp套接字_Java_Sockets_Bit Manipulation - Fatal编程技术网

Java 递增序列号udp套接字

Java 递增序列号udp套接字,java,sockets,bit-manipulation,Java,Sockets,Bit Manipulation,我正在实现UDP客户机-服务器程序的服务器端。我跟踪seq_num中的预期序列号,并计算sequence_num中的数据报中接收到的序列号。尽管seq_num和sequence_num的值打印为128,但在序列号超过127后,程序不会进入if(sequence_num==seq_num)条件。知道为什么会这样吗?下面给出了代码片段 接收数据包的前四个字节包含序列号。这与while循环中递增的计数器seq_num进行比较。当seq_num达到128时,不输入if条件 while(true){

我正在实现UDP客户机-服务器程序的服务器端。我跟踪seq_num中的预期序列号,并计算sequence_num中的数据报中接收到的序列号。尽管seq_num和sequence_num的值打印为128,但在序列号超过127后,程序不会进入if(sequence_num==seq_num)条件。知道为什么会这样吗?下面给出了代码片段

接收数据包的前四个字节包含序列号。这与while循环中递增的计数器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){
while(true){
System.out.println(“等待接收数据包”);
dg.接收(分组);
buf=packet.getData();
System.out.println(“收到的数据包”);
Random rn=新的Random();
双p=rn.nextDouble();
系统输出println(p);
字节[]seqnumarray=新字节[4];
对于(int i=0;i prob)
{
系统输出打印项次(“序号为”+序号);
System.out.println(“序列号为”+序列号);
if(序号==序号){

谢谢!

您使用的是
Integer
包装类,而不是
int
原语(实际上是
ByteBuffer.getInt()
返回的),并且关于引用和值相等的标准Java规则适用。作为一种优化,运行时将
整数
值-128实习到127,因此无意中使用
=
可以处理这些值,但对于一般情况,您需要使用
等于
。更好的是,只需使用普通的
int
,您的代码是exC非常复杂。请将您的问题缩小到行为不正常的特定位置,并清理格式以便于阅读。更改代码片段以指向问题的确切位置。谢谢!为什么您首先要通过一个大的
字符串
表示来来回处理问题?如果确实存在错误这样做的理由很好,你应该把所有这些都放在一个
格式
语句中。另外,你检查过你的
p>prob
条件是真的吗?我怎么能把它们都放在一个格式语句中呢?我想我应该一次操作一个字节。条件p>prob是真的。我检查过了。为什么字符串是真的?它是真的我不清楚你为什么会有它,除了非常昂贵的“重组”
序列号