0

我通过套接字从 android 应用程序向 java 程序发送消息。此消息由打印机发送。

这是我将消息从 android 发送到 java 程序的方式:

out.println("Hello there");
out.flush();

这就是我收到消息的方式:

while(true){
String msg = in.readLine();

System.out.println("MSG: " + msg);

...some if-statements...
}

System.out.println 的输出是: MSG: Hello there * MSG: null *

我怎么会在那里得到空值?我只是发送“你好”..

帮助将不胜感激,谢谢!

编辑: java程序的实际代码。

while (run) {
            String msg = in.readLine();
            String[] parts;  
            String username;
            String password = null;

            System.out.println("MSG: " + msg);

            parts = msg.split("\\*");
            username = parts[0];
            password = parts[1];

            boolean validUser = false;

            validUser = db.authenticate(username, password);

            if (validUser) {
                        db.updateIP(username,                     socket.getInetAddress().getHostAddress());
                        out.println("done");
                        out.flush();
            } else {
                        out.println("loginfail");
                        out.flush();
                        closeSocketConnection();
                }
            }
        }

    private void closeSocketConnection() throws IOException {
        in.close();
        out.close();
        socket.close();
        run = false;
    }
4

2 回答 2

0

你的while循环的退出条件是什么?

在我看来,它正在重复,并且readLinenull在到达流的末尾导致MSG: null被打印时返回。

更新给定的新信息:

假设user*123是一个有效的用户名/密码组合,则closeSocketConnection()永远不会调用,循环返回顶部,readLine返回null并且您会看到错误的输出。紧随其后的NullPointerExceptionparts = msg.split("\\*");

于 2013-10-10T19:42:10.427 回答
0

你的循环应该是:

while ((line = in.readLine()) != null)
{
    // ...
}

目前,您正在处理表示循环内流结束的 null ,因此当它不是时,您将其打印为消息。

于 2013-10-10T23:15:15.623 回答