2011-12-09 7 views
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を送信し、クライアントがそれに応答するようにするにはどうすればよいですか?

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

ありがとうございます!

答えて

1

あなたはDatgramPacket.getAddress()を使用して送信者に

を返信することができ、このデータグラムが送信されるため、またはデータグラムが受信されたマシンのIPアドレスを返します。

+0

@ peterlawrey-サーバーの側からIPを取得し、データグラムとしてクライアントに送信するように求めていますか? –

+0

ああ、私はそれを得た!ありがとう! –

+0

あなたはデータグラムを持つサーバとクライアントを持っておらず、送信者と受信者だけです。受信者は、パケットを送信したIPに返信することができます。 –

0

InetAddress.getHostAddressを使用してhostAddressを取得して試してみてください、IP部分を読んで、それを変数に渡します。

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

または

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

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