我通过套接字从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: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;
}
答案 0 :(得分:0)
while
循环的退出条件是什么?
我认为它正在重复,{I}会在到达流末尾时返回readLine
,导致null
被打印。
更新了给定的新信息:
假设MSG: null
是有效的用户名/密码组合,则永远不会调用user*123
,循环返回顶部,closeSocketConnection()
返回readLine
,您会看到错误的输出。随后null
NullPointerException
答案 1 :(得分:0)
你的循环应该是:
while ((line = in.readLine()) != null)
{
// ...
}
当你正在处理指示循环内部流结束的null时,因此当它不是时将你打印为消息。