java networking:如何获取服务器的IP:

时间:2012-12-28 18:25:24

标签: java

我想用java创建一个聊天信使,它将在局域网本地网络上运行。 在客户我有:

Socket socket=new Socket(serverIP, port);

如何理解什么是serverIP,即serverSocket等待传入连接的计算机的IP地址

这是一个非常小的网络:1个服务器和1个客户端,一个交叉网络

3 个答案:

答案 0 :(得分:2)

客户端必须知道服务器IP - 必须预先定义。客户端无法找到它的神奇方式。所以你可以:

  • 在客户端代码中对服务器IP进行硬编码
  • 在运行客户端时将服务器IP作为命令行参数传递

如果您的LAN路由器已设置DHCP,您的IP地址将随时间变化,因此第二种变体更好。我想商业聊天客户端有一个众所周知的URL / IP硬编码或类似的,他们从中获取聊天服务器的地址。

this C# example中,通过在同一台计算机上运行这个问题可以绕过这个问题,但是您可以看到客户端硬编码了“服务器IP”。

this VB example中,用户正在输入IP。

编辑:

客户端Socket(正如您所写)连接到服务器ServerSocket。 ServerSocket知道客户端套接字IP地址,因为客户端只是从该IP地址连接到它!如果您对此不了解,请阅读(并自己尝试)此excellent tutorial

“将其作为参数传递”:

假设你有一个名为“project”的文件夹,里面有一个名为“mypackage”的文件夹,里面有一个名为HelloWorld.class的文件。 HelloWorld.class是一个从HelloWorld.java编译的Java类文件,这是一个Java源文件,如下所示:

package mypackage;

public class HelloWorld {

public static void main(String[] args) {
    System.out.println("You entered the following arguments from the command line:");
    for (int i = 0; i< args.length; i++) {
        System.out.println(args[i]);
    }
}

将自己置于项目目录中并写下:

java mypackage.HelloWorld commandlineArgument1 commandlineArgument2

它会打印出来:

You entered the following arguments from the command line:
commandlineArgument1
commandlineArgument2

这是tutorial

答案 1 :(得分:0)

套接字类用于客户端,因此这将是您要连接的服务器的IP。

请参阅http://docs.oracle.com/javase/1.4.2/docs/api/java/net/ServerSocket.htmlhttp://docs.oracle.com/javase/1.4.2/docs/api/java/net/Socket.html

答案 2 :(得分:0)

我不想练习网络编程,这是一个真正的程序,并且将是商业化的。但无论如何只有2台计算机将通过交叉电缆进入网络。由于程序将安装在不同的计算机上,因此我在编程时无法预先定义服务器的IP。现在我正在寻找一种方式,我的程序自己可以在本地网络中找到服务器的IP并可以连接到服务器。所以它不能通过参数传递给客户端,因为它是未知的,程序必须找到...我终于找到了两个很好的方法让java程序自动找到它的服务器主机名,用户不会给编制任何知识产权或任何信息...

1.首先,我们找到我们的本地主机名:

InetAddress.getLocalHost().getHostName();

然后我们运行这个命令行:

net view

这将返回网络中当前主机的名称(在我的情况下是LAN网络),现在因为我们有本地主机名和所有主机名,我们可以找到另一台主机(在我的情况下肯定是服务器,因为网络中只有2台计算机...)名称,所以很容易连接到:

Socket socket=new Socket(InetAddress.getByName(SERVER_NAME),port);

2.客户端也可以通过multicastSocketing获取服务器的IP。所有客户端和服务器都加入到预定义IP上的组中,服务器将其IP发送给所有接收者(=客户端)。