我正在使用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没有被转换?
答案 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
。