Java中的NumberFormatException是一个数字的字符串

时间:2014-10-28 13:29:01

标签: java udp numberformatexception

我正在使用Java实现套接字编程。我收到了这个错误。

我的代码是:

public class UDPServer  {

public static void main(String[] args) throws Exception {
    byte[] data = new byte[1024];
    byte[] sendData = new byte[1024];
    byte[] num1b = new byte[1024];      
    String num1String;
    DatagramPacket recievePacket;
    String sndmsg;
    int port;
    DatagramSocket serverSocket = new DatagramSocket(9676);
    System.out.println("UDP Server running");
    byte[] buffer = new byte[65536];
    while(true) {
        recievePacket = new DatagramPacket(num1b, num1b.length);
        serverSocket.receive(recievePacket);
        num1String = new String(recievePacket.getData());
        System.out.println(num1String);
        System.out.println(num1String.length());
         int numbers2=Integer.parseInt(num1String);

我运行我的UDP客户端:

Enter number 1 :2
Enter number 2 :5
Enter number 3 :4
Enter number 4 :3
Enter number 5 :1
Select Protocol: 
1.UDP
2.TCP
1
Data sent to server

我的服务器显示:

$ java UDPServer 
UDP Server running
waiting for data from client 
2
1024
Exception in thread "main" java.lang.NumberFormatException: For input string: "2"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at UDPServer.main(UDPServer.java:49)
$

导致此错误的原因是什么?为什么我的字符串2没有被转换?

2 个答案:

答案 0 :(得分:0)

您的客户端代码可能存在问题。但是,一个简单的解决方法是采用num1String的第一个字符:

int numbers2=Integer.parseInt(num1String.substring(0, 1));

答案 1 :(得分:0)

这应该有效:

num1String = new String(recievePacket.getData(), 0, receivePacket.getLength());

当您从服务器收到数据包时,receivePacket.getLength()将为您提供收到的字节数。数组中的剩余字节将保持不变,因为它们不是最后一个接收数据包的一部分,并且其中大部分很可能为0.如果在String中包含这些字节,它将包含许多不相关的内容最后的字符,大多数是null - 字符(取决于剩余字节和默认字符集)。如果某些IDE和/或平台包含String个字符,则可能无法打印整个null