JAVA:TCP readline() 终止,二进制零

标签 java tcp

我正在尝试从第 3 方服务器接收 TCP 数据,其消息以二进制零 ('\0') 终止,而不是换行符 ('\n) >)。据我了解,JAVA 的 readline() 等待 '\n' 终止,这可能是我的代码挂起的原因。

try {
    socket = new Socket(hostip, portNum);
    BufferedReader inFromServer = new BufferedReader(new InputStreamReader (socket.getInputStream()));
    msg = inFromServer.readLine();
    socket.close();
    } catch (IOException e) {
        msg = "Connection failed. IOException.";
    }

有没有办法从服务器读取消息,使'\0'表示传输结束而不是'\n'

谢谢

最佳答案

直接使用InputStreamReader即可:

    try {
        socket = new Socket(hostip, portNum);
        InputStreamReader in = new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8);

        StringBuffer sb = new StringBuffer();
        int ch = 'a';

        while((ch = in.read()) != (char)0){
            if(ch == -1) break;
            System.out.println(ch);
            sb.append((char)ch);
        }

        msg = sb.toString();
        socket.close();
        } catch (IOException e) {
            msg = "Connection failed. IOException.";
        }

关于JAVA:TCP readline() 终止,二进制零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28646436/

相关文章:

java - 在 equals 检查中避免 NullPointerException 的干净方法

java - Pojo 验证有效。 Poko(kotlin)没有。为什么?

python - 如何知道我的服务器是否使用 SSL(使用 Twisted)

java - 如何获取跨对象中字符的索引?

java - 无法从mysql检索数据到java eclipse

C 编程 TCP 校验和

c - TCP套接字: Server/Client code structure

linux - TCP 套接字连接因 SO_REUSEADDR 而变得不可靠

c# - 最大化任务并发性 - 使用 TCP/IP 和特定端口过滤

java - 与逐行读取相比,将整个文件读取到单个字符串中有何优点和缺点?