我正在Android上实现服务器,并且正在使用:

while (!Thread.currentThread().isInterrupted()) {
    try {
        int r;
        String response = "";
        while ((r = input.read()) > 0) {
        ...
        }
    ...
}

我有两个问题。如果客户端向我发送了一个值为0的字节,则服务器不会接收到它。

第二个问题是,如果字节值为128或更大,我将继续接收65533或二进制值11111101的值。

任何人都知道如何解决这些问题。我是JAVA联网方面的初学者。

最佳答案

我遇到了同样的问题,并且在this问题中找到了答案:

您正在处理二进制数据,因此您应该使用原始流-请勿将其转换为用于读取字符的Reader。

您收到65533,因为这是当值不能表示为实际Unicode字符时使用的“Unicode替换字符”的整数。当前代码的确切行为将取决于系统上的默认字符编码-同样,您也不应该依赖于此。

我失败的代码是(简化):

InputStream is = socket.getInputStream();
BufferedReader input = new BufferedReader(new InputStreamReader(is));

int data = input.read();
if(data >=0){
    System.out.println("Obtained: "+data);
}

和您一样,当另一面发送的数字大于127时,它正在打印:Obtained: 65533

要解决此问题,只需调用InputStream.read()方法即可,而不是创建任何reader:
InputStream is = socket.getInputStream();

int data = is.read();
if(data >=0){
    System.out.println("Obtained: "+data);
}

注意:可能将此问题标记为与先前引用的问题重复。

07-24 01:25