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没有被转换
# 1 楼答案
这应该起作用:
当您从服务器接收数据包时,
receivePacket.getLength()
将给出接收到的字节数。阵列中的剩余字节将保持不变,因为它们不是最后接收到的数据包的一部分,并且大多数字节很可能为0。如果在String
中包含这些字符,那么它将在末尾包含许多不相关的字符,大部分是null
-字符(取决于剩余的字节和默认字符集)。如果包含null
个字符,则某些IDE和/或平台可能无法打印整个String
# 2 楼答案
您的客户端代码可能有问题。但是,一个简单的解决方法是使用
num1String
的第一个字符: