有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中数字字符串的udp NumberFormatException

我正在使用Java实现socket编程。我得到这个错误

我的代码是:

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) 个答案

  1. # 1 楼答案

    这应该起作用:

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

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

  2. # 2 楼答案

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

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