首页 文章

通过数据报套接字进行网络发现:多播

提问于
浏览
0

我正在实现服务器侦听网络中任何活动客户端的示例 .

我正在使用Datagram套接字为服务器执行多播,而客户端则响应服务器 .

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 apriori(硬编码) . 如何修改服务器端的代码,以便服务器将其IP发送到客户端,客户端响应它?

我能够使用套接字执行此操作但是可以使用数据报套接字吗?

谢谢!

2 回答

  • 0

    您可以使用DatgramPacket.getAddress()并回复发件人

    返回发送此数据报或从中接收数据报的机器的IP地址 .

  • 1

    尝试使用 InetAddress.getHostAddress 获取 hostAddress ,读取IP部分并将其传递给变量 .

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

    要么

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

    我希望其中任何一种都能带来更好的方式 .

相关问题