我正在做多线程客户端 - 服务器架构,每次客户端连接时,服务器都会生成一个新线程。
我的沟通协议如下
当客户端连接到服务器时,将建立连接。每次客户端单击登录按钮时,用户名和密码都将从客户端发送到服务器。
例如:
String username=Jtextfield[0].getText();
char[] password_char = Jpasswordfield.getPassword();
//convert from char array to String
String password_str = new String(password_char);
//hash player password
String playerhashpassword = Utility.getHash(password_str);
//send to server for login validation
Utility.WriteToServer(username);
Utility.WriteToServer(playerhashpassword);
如果登录无效,服务器将回复“否”。登录验证就像这样完成
while (loginsuccess == false)
{
//if server sent something
//then read
playername = ReadFromClient();
playerhashpassword = ReadFromClient();
loginsuccess = gm.loginsuccess(playername, playerhashpassword);
}
这段代码的问题在于它将继续读取客户端发送的内容,尽管客户端没有发送任何导致NullPointerException的内容。
仅在客户端发送内容时如何ReadFromClient?
ReadFromClient
public String ReadFromClient()
{
String inputLine;
try
{
inputLine=in.readLine();
return inputLine;
}
catch(IOException e)
{
System.out.println("Read or write to socket failed.");
System.exit(2);
}
return "willneverreachhere";
}
答案 0 :(得分:0)
您忽略了readLine()可以返回null。你需要检查它。