仅当客户端套接字已为服务器套接字发送内容时,如何从客户端套接字读取

时间:2014-05-26 12:04:39

标签: java multithreading sockets

我正在做多线程客户端 - 服务器架构,每次客户端连接时,服务器都会生成一个新线程。

我的沟通协议如下

当客户端连接到服务器时,将建立连接。每次客户端单击登录按钮时,用户名和密码都将从客户端发送到服务器。

例如:

 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";

    }

1 个答案:

答案 0 :(得分:0)

您忽略了readLine()可以返回null。你需要检查它。