6

朝。

私は Java とソケット接続の初心者ですが、ポート 8001 の 255.255.255.255 で UDP パケット/ブロードキャストをデバイスに送信しようとしています。データを正常に送信できますが、データを受信するときに接続がタイムアウトします。私はパケット スニファーを持っていて、パケットが送信され、デバイスが応答するのを確認できます。

コードに欠けているのは初歩的な間違いだと確信していますが、しばらくの間それに固執しており、助けていただければ幸いです。

 m_Socket = new DatagramSocket(m_SERVERPORT);
 InetAddress address = InetAddress.getByName(m_SERVERIP);


 m_DataPack = new DatagramPacket(m_SERVERCMD.getBytes(), m_SERVERCMD.getBytes().length,
 address, m_SERVERPORT);
 m_Socket.setBroadcast(true);
 m_Socket.connect(address, m_SERVERPORT);

 m_Socket.send(m_DataPack);
 m_DataPack = new DatagramPacket(data, data.length,
 address, m_SERVERPORT);


 m_Socket.receive(m_DataPack); // This is where it times out


 data = m_DataPack.getData();
 String received = data.toString();
 System.out.println("Received: " + received);
 m_Socket.close();

ありがとう、ギグエム。

編集:

これが役立つかどうかはわかりませんが、m_Socket オブジェクトを見ると、送信する直前に次のように表示されます。

bound = true;
close = false;
connectedAddress = Inet4Address (id = 32) (-1,-1,-1,-1);
connectedPort = 8001;
connectState = 1;
created = true;
impl = PlainDatagramSocketImpl;
oldImpl = false;

m_DataPack オブジェクトは次のとおりです。

address = Inet4Address (id = 32) (-1,-1,-1,-1);
bufLength = 6 (size of packet I'm sending is 6 char long);
offset = 0;
port = 8001;
4

4 に答える 4

11

これは意味がありません。1 対多のブロードキャストを行い、1 対 1 の接続も行っています。それはどれですか?

接続を失います。そして、255.255.255.255 を失います。これは、約 20 年間、大幅に廃止されてきました。192.168.1.255 などのサブネット ローカル ブロードキャスト アドレスを使用します。

于 2010-06-02T03:53:43.747 に答える
3

Broadcasting to Multiple Recipientsで説明されている MulticastSocket も参照してください。お役に立てれば。

于 2012-02-16T08:06:26.587 に答える
1

データグラムを受信したい場合は、ローカル エンドポイント (アドレス + ポート)にbind()する必要があります。

于 2010-06-01T14:56:04.080 に答える