2

DatagramPacketJavaでDatagramSocketクラスを使用して単純な文字列を受信しようとしています。

これが私のコードです:

public static void main(String [] args){

    DatagramSocket aSocket = null;

    try{
        aSocket= new DatagramSocket();
        String aMessage = "my message";
        System.out.println("1");
        byte [] m = aMessage.getBytes();
        InetAddress aHost = InetAddress.getByName("localhost");
        int serverPort = 6789;
        DatagramPacket request = new DatagramPacket(m,aMessage.length(),aHost,serverPort);
        System.out.println("2");
        aSocket.send(request);
        System.out.println("3");
        byte [] buffer = new byte[1000];
        System.out.println("4");
        DatagramPacket reply = new DatagramPacket(buffer,buffer.length);
        aSocket.receive(reply);
        System.out.println("5");
        System.out.println("DATA RECEIVED" + reply.getData());
        aSocket.close();

    }
    catch(SocketException ex){
       ex.printStackTrace();
    }

    catch(IOException ioe){
       ioe.printStackTrace();
    }
}

受信したデータを印刷していません。コードが実行される場所を確認するためだけに配置System.out.printlnしましたが、4 で停止し、5 を出力しません。これは、問題が 4 のすぐ下にあることを意味します。なぜデータを受信して​​いないのですか?

4

1 に答える 1

3

@aviは、信頼を得るために同じデータグラムソケットを使用しないでください。応答を取得するには、サーバー データグラム socket.use のポート番号を指定する必要があります。

DatagramSocket datagramSocket = new DatagramSocket(6789);// Which is given by you only

次に使用する datagramSocket.receive(reply);

また、アドレスを取得するには、このメソッドを使用します

InetAddress aHost = InetAddress.getLocalHost();

それ以外の

InetAddress aHost = InetAddress.getByName("localhost");

このリンクを参照してください

http://www.java2s.com/Code/Java/Network-Protocol/UseDatagramSockettosendoutandreceiveDatagramPacket.htm

于 2013-02-02T09:43:48.920 に答える