【发布时间】:2014-05-26 12:04:38
【问题描述】:
我正在做多线程客户端-服务器架构,每次客户端连接时服务器都会产生一个新线程。
我的通讯协议如下
当客户端连接到服务器时,会建立连接。客户端每次点击登录按钮时,都会将用户名和密码从客户端发送到服务器。
例如:
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);
}
这个sn-p代码的问题是它会继续读取客户端发送的内容,尽管客户端没有发送任何导致 NullPointerException 的内容。
只有当客户端发送了一些东西时,我如何从客户端读取???
从客户端读取
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";
}
【问题讨论】:
标签: java multithreading sockets