2012-03-26 2 views
0

こんにちは私は、基本的なクライアントからサーバへのシナリオを設定し、それらの間でデータを交換するコードを持っています。基本的に、サーバーはクライアントからのデータを待っていて、クライアントから送信されると、それを画面に表示します。クライアント間でメッセージサイズを取得する

私はデータの長さを送信することを任されています。私は、データの実際の長さまたは送信されたパケットの合計サイズを意味する可能性があるため、これが何を意味するのかについて少し混乱しています。

メッセージは単にMaryです。 これは、パケットサイズが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

実際のコードを見ずにどのように知っていると思いますか? –

+0

私の悪い...今すぐ追加しました – Katana24

答えて

1

期待どおりの動作です。 "Mary".getBytes()は、長さ4のbyte[]を返します。これは1文字ごとに1バイトです。なぜなら、それはASCIIだけなので意味があります。

は同様に、あなたはあなたがそれらの同じ4つのバイトを送っているDatagramPacketを言ったので、それはDatagramPacket#getData()はあなたが送信するためにそれを求めているデータ...と一致していることは驚きであってはなりません。

送信するデータが実際にたくさんある場合を除いて、パケットは完全な65535バイトを使用しないことをお勧めします。それはの最大値、の最小値ではありません。

+0

はい、これはすべて意味があり、私は65535が限界であり、最小ではないことを知っていました。私はちょうどこの数字が少し大きくなるはずだと思った。ありがとう – Katana24

+0

なぜそれが大きくなるはずですか? –

1

java.net.DatagramPacket.getLength()は "ペイロード"、生のUDPパケットのないサイズを返します。私はその要件の明確化を求めるだろう。 javadocツールから

は、送信するデータの長さ、または受信したデータの長さを返します。

関連する問題