0

サーバーがネットワーク内のアクティブなクライアントをリッスンする例を実装しています。

サーバーがマルチキャストを実行し、クライアントがサーバーに応答するためにデータグラムソケットを使用しています。

public void run() {

    try {
        byte[] recvBuf = new byte[15000];
        DatagramPacket packet = new DatagramPacket(recvBuf, recvBuf.length);
        DatagramSocket dSock = new DatagramSocket(4445);
        dSock.receive(packet);
        int byteCount = packet.getLength();
        ByteArrayInputStream byteStream = new ByteArrayInputStream(recvBuf);
        ObjectInputStream is = new ObjectInputStream(new BufferedInputStream(byteStream));
        }

}

そしてクライアント側で:

public void run() {
    {
     ObjectOutputStream os = null;
        try {
            InetAddress address = InetAddress.getByName("Server's IP");//Note!
            ByteArrayOutputStream byteStream = new ByteArrayOutputStream(15000);
            os = new ObjectOutputStream(new BufferedOutputStream(byteStream));
            os.flush();
              os.flush();
            byte[] sendBuf = byteStream.toByteArray();
            DatagramPacket packet = new DatagramPacket(sendBuf, sendBuf.length, address, 4445);
            int byteCount = packet.getLength();
            }
     }

}

上記の例では、クライアントはサーバーの IP アプリオリ (ハードコード) を知っている必要があります。サーバーがそのIPをクライアントに送信し、クライアントがそれに応答するように、サーバー側のコードを変更するにはどうすればよいですか?

ソケットを使用してこれを行うことができましたが、データグラム ソケットを使用することは可能ですか?

ありがとう!

4

2 に答える 2

1

DatgramPacket.getAddress()を使用して送信者に返信できます

このデータグラムの送信先または受信元のマシンの IP アドレスを返します。

于 2011-12-09T12:52:51.240 に答える
0

hostAddressを使用して取得しInetAddress.getHostAddress、IP 部分を読み取り、変数に渡します。

InetAddress address = InetAddress.getByName("[variable]");

また

InetAddress address = InetAddress.getByAddress("[variable]");

これらのいずれかがより良い方法につながることを願っています。

于 2013-05-19T13:09:25.513 に答える