0

みんな。コンセントの使い方について質問です。それはかなり単純に思えますが、私はそれを管理することができません。そこで疑問が生じます: ソケットを 1 つだけ使用して、複数のクライアントにデータ パケットを送信できますか??

ds1 = new DatagramSocket();
dp1 = new DatagramPacket(packet, packet.length, InetAddress.getByName(address1), port);
dpto2 = new DatagramPacket(packet, packet.length, InetAddress.getByName(address2), port);
dpto3 = new DatagramPacket(packet, packet.length, InetAddress.getByName(address3), port);**

ここで、address1、address2、および address3 が異なります。1 回のプログラム実行で複数のクライアントに接続し、それらに UDP パケットを送信したいと考えています。私はまだそれをテストしていません。それを行う方法についていくつかの提案を得たいだけです。

どんな助けでも大歓迎です...

4

2 に答える 2

0

質問を理解していれば、送信するデータがすべてのクライアントで同じである場合、クライアントごとに個別のパケットを作成する必要はなく、1つのパケットを作成してそのアドレス(および必要に応じてポート)を変更するだけですそれをするでしょう:

/**
 * Send a DatagramPacket to all addresses in hosts.
 * @param socket 
 *  A created DatagramSocket
 * @param hosts 
 *  Array of strings containing the hosts to send the packet, 
 *  each one can be either a host name or a dotted IP address.
 * @param port
 *  The port the clients are listening
 * @param data
 *  Data to send
 * @return
 *  Number of packets sent.
 */
int sendPackets(DatagramSocket socket, String[] hosts, int port, byte[] data)
{
    if (hosts.length > 0)
    try
    {
        int ret=0;
        DatagramPacket packet = new DatagramPacket(data, data.length);
        packet.setPort(port);
        for (int i = 0; i < hosts.length; i++)
        {
            try 
            {
                packet.setAddress(InetAddress.getByName(hosts[i]));
                socket.send(packet);
                ret++;
            }
            catch (Exception e)
            { 
                Log.e("SEND:", "Error sending to host: " + hosts[i]);
                e.printStackTrace();
            }
        }
        return ret;
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    return 0;
}

この関数は次のように使用できます。

try {
    DatagramSocket socket = new DatagramSocket();
    byte[] data = "This is a test message.\n".getBytes();
    sendPackets(socket, new String[] { "192.168.1.10", "192.168.1.12", "192.168.1.54" }, 2020, data);
} 
catch(Exception e){}
于 2013-08-13T18:40:42.153 に答える