我想用 java 制作一个聊天信使,它将在 LAN 本地网络上工作。在客户端我有:
Socket socket=new Socket(serverIP, port);
如何理解什么是serverIP,serverSocket正在等待传入连接的计算机的ip地址
这是一个非常小的网络:1 个服务器和 1 个客户端,一个交叉电缆网络
我想用 java 制作一个聊天信使,它将在 LAN 本地网络上工作。在客户端我有:
Socket socket=new Socket(serverIP, port);
如何理解什么是serverIP,serverSocket正在等待传入连接的计算机的ip地址
这是一个非常小的网络:1 个服务器和 1 个客户端,一个交叉电缆网络
客户端必须知道服务器 IP - 它必须是预定义的。客户没有神奇的方法可以找到它。这样你就可以:
如果您的 LAN 路由器设置了DHCP,您的 IP 地址会随着时间而改变,因此第二种变体更好。我想商业聊天客户端有一个众所周知的 URL/IP 硬编码或类似的,他们从中获取聊天服务器地址。
在这个 C# 示例 中,通过在同一台机器上运行两者来绕过这个问题,但是您可以看到客户端具有硬编码的“服务器 IP”。
在这个 VB 示例中,IP 由用户输入。
编辑:
客户端Socket(如您所写)连接到服务器ServerSocket。ServerSocket 知道客户端 Socket IP 地址,因为客户端只是从该 IP 地址连接到它!如果您不理解这一点,请阅读(并自己尝试)这个出色的教程。
“将其作为参数传递”:
假设您有一个名为“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
一个教程。
套接字类用于客户端,因此这将是您要连接的服务器的 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 台计算机将通过交叉电缆进入网络。由于该程序将安装在不同的计算机上,因此我在编程时服务器的 IP 对我来说是未知的,并且无法预定义。现在我正在寻找一种方法,让我的程序本身可以在该本地网络中找到服务器的 IP 并可以连接到服务器。所以它不能通过参数传递给客户端,因为它是未知的,程序必须发现......我终于找到了 2 个很好的方法让 java 程序自动找到它的服务器主机名并且用户不会给出对任何 IP 或任何信息进行编程...
1.首先我们找到我们的本地主机名:
InetAddress.getLocalHost().getHostName();
然后我们运行这个命令行:
net view
这将返回当前网络中的主机名(在我的情况下是 LAN 网络),现在我们有了本地主机名和所有主机名,我们可以找到另一台主机(在我的情况下绝对是服务器,因为有网络中只有 2 台计算机...)名称,因此很容易连接到该名称:
Socket socket=new Socket(InetAddress.getByName(SERVER_NAME),port);
2.客户端也可以通过multicastSocketing获取服务器的IP。所有客户端和服务器都加入到预定义 IP 上的组,服务器将其 IP 发送给所有接收者(= 客户端)。