我尝试让客户端向服务器发送一些数据。由于某种原因,它总是进入异常区域......
我只是希望服务器接受数据。之后,它需要做这个简单的功能。
套接字,读写器的初始化是可以的。
客户端代码:
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");
}
}
答案 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
现在在服务器端,您正在使用float
将int
转换为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"