2012-03-26 74 views
0

嗨我有代碼,它建立了一個基本的客戶端到服務器場景並在它們之間交換數據。服務器基本上等待來自客戶端的數據,並且一旦由客戶端發送,就將其打印到屏幕上。跨客戶端獲取郵件大小 - 服務器

我的任務是獲取發送數據的長度。對於這意味着什麼,我有點困惑,因爲它可能意味着數據的實際長度或發送數據包的總大小。

消息簡直就是瑪麗。 現在這是否意味着數據包大小將是4?我有一些代碼得到這個像這樣:

System.out.println("Packet Length: "+packet.getData().length); 
System.out.println("Data Length: "+message.getBytes().length); 

他們都返回4.但是,最大數據包大小爲65535所以我想知道,如果這個數字應該是大了很多......

現在用代碼:

public static void main(String[] args) throws IOException 
{ 
    String message = "Mary"; 
    byte[] buf = message.getBytes(); 
    System.out.println("Aclient: message is:" + message); 

    String serverName = "127.0.0.1"; 
    if (args.length == 1) { 
     serverName = args[0]; 
    } 
    // get a datagram socket 
    DatagramSocket socket = new DatagramSocket(); 

    // send request   
    InetAddress address = InetAddress.getByName(serverName); 
    int port = 4441; 
    DatagramPacket packet = new DatagramPacket(
          buf, buf.length, address, port); 

    System.out.println("Packet Length: "+packet.getData().length); 
    System.out.println("Data Length: "+message.getBytes().length); 


    System.out.println("Aclient: destination name:" + 
      address.getHostName() + " destination port:" + port); 

    System.out.println("Aclient: sending datagram"); 
    socket.send(packet);  
} 
+0

我們應該如何知道沒有看到任何真實的代碼? – 2012-03-26 13:20:32

+0

我的壞...現在加了它 – Katana24 2012-03-26 13:30:53

回答

1

你看到的是預期的行爲。 "Mary".getBytes()返回長度爲4的byte[];對於每個字符都是1個字節,這是合理的,因爲它只是ASCII。

同樣,你告訴,你發送這些相同的4個字節的DatagramPacket,所以它應該是毫不奇怪,DatagramPacket#getData()與...你問它發送的數據一致。

希望它是有道理的,數據包不會使用完整的65535字節,除非你真的有這麼多的數據發送。這是一個最大值,不是最小值,大小。

+0

是的,這一切都有道理,我知道65535是一個極限,而不是最低限度。我只是認爲這個數字應該更大一點。謝謝 – Katana24 2012-03-26 13:53:38

+0

爲什麼它應該更大? – 2012-03-26 13:53:59

1

java.net.DatagramPacket.getLength()返回 「有效載荷」,原始的UDP分組的不大小。我會要求澄清一下這個要求。

從Javadoc中:

返回的數據的長度將要發送或數據的長度接收。

相關問題