Java 无法在客户端分析整个UDP消息

Java 无法在客户端分析整个UDP消息,java,string,sockets,udp,tokenize,Java,String,Sockets,Udp,Tokenize,这是在UDP服务器端发送的字符串: S:0T:1FL:4IP:127.0.0.1P:9000 我能够标记和打印,直到最后一个字,当我得到这个错误: Exception in thread "Thread-2" java.lang.NumberFormatException: For input string: "9000 at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Int

这是在UDP服务器端发送的字符串:
S:0T:1FL:4IP:127.0.0.1P:9000

我能够标记和打印,直到最后一个字,当我得到这个错误:

Exception in thread "Thread-2" java.lang.NumberFormatException: For input string: "9000  
at java.lang.NumberFormatException.forInputString(Unknown Source)    
at java.lang.Integer.parseInt(Unknown Source)  
at java.lang.Integer.parseInt(Unknown Source)  
at com.acn.fog.listener.UdpListener.tokenizeIotIntoPacket(UdpListener.java:119)  
at com.acn.fog.listener.UdpListener.run(UdpListener.java:43)  
at java.lang.Thread.run(Unknown Source)  
服务器代码:

    clientSocket = new DatagramSocket(); // make a Datagram socket  
    byte[] sendData = new byte[data.getBytes().length]; // make a Byte array of the data to be sent  
    sendData = data.getBytes(); // get the bytes of the message  
    DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); // craft the message to be sent  
    clientSocket.send(sendPacket); // send the message  
客户端代码:

    byte[] receiveData = new byte[10000]; // data size not to exceed ~10KB  
    DatagramPacket receivePacket = new DatagramPacket(receiveData,   receiveData.length); // receive the response  
    serverSocket.receive(receivePacket);  
    // Tokenize received IOT packet into String  
    String iotPacketString = new String(receivePacket.getData());  
感谢您在这个问题上的帮助。谢谢

无法在客户端分析整个UDP消息

您正在分析的不仅仅是整个UDP消息:

String iotPacketString = new String(receivePacket.getData()); 
无效。你忽略了长度。这应该是:

String iotPacketString = new String(receivePacket.getData(), receivePacket.getOffset(), receivePacket.getLength()); 

你确定你没有在某处调用
Integer.parseInt
吗?在调用
parseInt
之前,你可能只需要先
trim
你的字符串,但我说不出来,你也没有提供正确的代码。@ScaryWombat非常感谢。我没有使用修剪。现在我使用trim,我的解析工作没有问题。我很困惑,我必须处理一些下线字符,因为发件人代码没有附加任何空格。谢谢。对我来说,这似乎比添加trim()更有意义,trim()同样有效。
trim()
不正确。任何消息都可以正确地包含前导空格或尾随空格,并且在字节数组的末尾可能会留下其他数据,除了可以通过
trim()
删除的内容之外:例如,先前较长消息的剩余部分。