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

Try getting hostAddress using InetAddress.getHostAddress, read the IP part and pass it to a variable.

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

or

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

I hope any of these would lead to a better way.

于 2013-05-19T13:09:25.513 回答