lyc*_*001 3 java sockets android tcp
我正在 Android 上实现一个服务器,我正在使用:
while (!Thread.currentThread().isInterrupted()) {
try {
int r;
String response = "";
while ((r = input.read()) > 0) {
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
我有两个问题。如果客户端向我发送一个值为 0 的字节,则服务器不会收到它。
第二个问题是,如果字节值是 128 或更多,我不断收到 65533 的值或 11111101 的二进制值。
任何人都知道如何解决这些问题。我是 JAVA 网络的初学者。
我遇到了同样的问题,我在这个问题中找到了答案:
您正在处理二进制数据,因此您应该使用原始流 - 不要将其转换为用于读取字符的 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);
}
Run Code Online (Sandbox Code Playgroud)
像您一样,它正在打印:Obtained: 65533当另一侧发送大于 127 的数字时。
要解决这个问题,只需调用该InputStream.read()方法而不是创建 any reader:
InputStream is = socket.getInputStream();
int data = is.read();
if(data >=0){
System.out.println("Obtained: "+data);
}
Run Code Online (Sandbox Code Playgroud)
注意:这个问题可能会被标记为与先前引用的问题重复。