我想用java创建一个聊天信使,它将在局域网本地网络上运行。 在客户我有:
Socket socket=new Socket(serverIP, port);
如何理解什么是serverIP,即serverSocket等待传入连接的计算机的IP地址
这是一个非常小的网络:1个服务器和1个客户端,一个交叉网络
答案 0 :(得分:2)
客户端必须知道服务器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.html和http://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发送给所有接收者(=客户端)。