Java Socket与C#TcpClient

时间:2013-08-24 17:03:22

标签: c# java sockets tcpclient

我正在将Java应用程序转换为C#,我对基础字节流有一个普遍的问题。

'C'中的'byte'是无符号的,而不是在Java中签名。

这对我的代码部分做了什么,我在比较字节的等效性。例如:

Java代码

public final static byte IAC = (byte)255;
...
void parseBuffer(byte[] bb, int len) {
    try {
        for(int i = 0;i < len; i++) {
            if(bb[i] == IAC)
                DoSomething();
        }
    }
}

我是否需要对IAC变量的声明做任何事情?它会是其他的(字节)255吗?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

  

我是否需要对IAC变量的声明做任何事情?

没有。这绝对没问题。 IAC的最终值为-1,但这很好,仍然代表一个设置了所有位的字节。如果从C#端发送一个值为255的字节,它将在Java端正确拾取。

另一种替代方法是使用更大的数据类型(例如int以方便使用,并使用位掩码以[0,255]范围内的值结束:

public static final int IAC = 255;
...
void parseBuffer(byte[] bb, int len) {
    try {
        for(int i = 0; i < len; i++) {
            int value = bb[i] & 0xff; // To get a value in the range [0, 255]
            if (value == IAC) {
                DoSomething();
            }
        }
    }
}