2014-10-28 32 views
0

我正在使用Java實現套接字編程。我得到這個錯誤。Java中的NumberFormatException是一個數字的字符串

我的代碼是:

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

向我們展示整個代碼並指出拋出異常的行。 – ortis 2014-10-28 13:34:29

+0

@我編輯了我的帖子。請檢查? – divinediu 2014-10-28 13:39:50

+0

你在'while'循環中間切斷了代碼。你應該發佈所有的代碼來獲得準確的答案。拋出異常在哪裏?控制檯的輸出是什麼?我想知道什麼'System.out.println(num1String)'打印。 – ortis 2014-10-28 13:42:43

回答

0

您的客戶端代碼可能存在問題。然而,一個簡單的解決方法是採取num1String的第一個字符:

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

這會照顧雙位數字嗎? – divinediu 2014-10-28 14:07:48

0

這應該工作:當您收到來自服務器的數據包

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

receivePacket.getLength()會給你的字節數接收。數組中的其餘字節將保持不變,因爲它們不是最後收到的數據包的一部分,其中大多數字節最可能爲0.如果在String中包含這些字符,那麼它最後將包含大量不相關的字符,主要是null -characters(取決於剩餘字節和默認字符集)。如果包含null字符,某些IDE和/或平臺可能無法打印整個String

相關問題