【问题标题】:How to read from Client socket only when Client socket has sent something for Server Socket仅当客户端套接字为服务器套接字发送了某些内容时,如何从客户端套接字读取
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2017-01-04
      • 2023-03-13
      • 2014-03-10
      • 2013-04-01
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多