我正在实现一个示例,其中服务器侦听网络中的任何活动客户端。
我使用数据报套接字让服务器进行多播,并使用客户端响应服务器。
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发送给客户端并由客户端对其进行响应?
我可以使用套接字做到这一点,但是否可以使用数据报套接字呢?
谢谢!
发布于 2011-12-09 20:52:51
您可以使用DatgramPacket.getAddress()并回复发件人
返回此数据报要发送到的计算机或从其接收数据报的计算机的IP地址。
发布于 2013-05-19 21:09:26
尝试使用InetAddress.getHostAddress获取hostAddress,读取IP部分并将其传递给变量。
InetAddress address = InetAddress.getByName("[variable]");或
InetAddress address = InetAddress.getByAddress("[variable]");我希望这些都能带来更好的方法。
https://stackoverflow.com/questions/8445685
复制相似问题