服务器端和客户端端,Java

时间:2014-05-06 10:26:05

标签: java client-server

我尝试让客户端向服务器发送一些数据。由于某种原因,它总是进入异常区域......

我只是希望服务器接受数据。之后,它需要做这个简单的功能。

套接字,读写器的初始化是可以的。

客户端代码:

public void SendPlayer(String Name, float Score,int place) throws NullPointerException
{
    out.println("New High Score");
    try
    {
        while (!in.readLine().equals("ACK"));
        out.println(Name);
        out.println(Score);
        out.println(place);
    }
    catch (IOException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

服务器端代码:

while(true)
{           
    try
    {
        if (in.ready())
        {
            option = in.readLine();
            while(option == null)
            {
                option = in.readLine();
            }
            switch(option)
            {
                case ("New High Score"):
                {
                    out.println("ACK");
                    System.out.println("ack has been sent");
                    this.setHighScore(in.readLine(),Integer.parseInt(in.readLine()),
                    Integer.parseInt(in.readLine()));
                    break;
                }
                default:
                {
                    System.out.println("nothing");
                    break;
                }
            }
        }
    } 
    catch (Exception e)
    {
        // TODO Auto-generated catch block
        System.out.println("Exception e");
    }
}

2 个答案:

答案 0 :(得分:0)

您的问题是您无法将null与String进行比较。 最好的是你通过try环绕功能调用。

try {
    SendPlayer (/*Here the params*/);
    //Continue, since no null pointer exception has been thrown
} catch (NullPointerException) {
    //Your handling code here...
}

答案 1 :(得分:0)

根据您的评论 - NullPointerException

行上的完整例外if(in.ready)

从异常中可以清楚地看出变量in未初始化。请再次检查。


在比较NullPoinerException时避免String的最佳做法是按相反的顺序进行比较,如下所示:

while (!"ACK".equals(in.readLine()));

您的代码中还有一个问题。

客户端向服务器发送三个值,如下所示:

out.println(Name); // String
out.println(Score);// float
out.println(place); // int

现在在服务器端,您正在使用floatint转换为Integer.parseInt(in.readLine()),如下所示,这将导致NumberFormatException

this.setHighScore(in.readLine(),Integer.parseInt(in.readLine()),
Integer.parseInt(in.readLine()));// converting Score to int

例如

Integer.parseInt("2.0");

将导致

java.lang.NumberFormatException: For input string: "2.0"

还有一个示例代码

float val = 2;
String str = String.valueOf(val);
Integer.parseInt(str);

将导致

java.lang.NumberFormatException: For input string: "2.0"