繁体   English   中英

通过LAN上的TCP / IP进行Java聊天

[英]Java Chat with TCP/IP over LAN

我已经开发了一个用于在Java中使用TCP / IP进行聊天的应用程序。 到目前为止,当在同一台计算机上运行服务器和客户端时,它已经完成了工作,但是我想使其通过局域网工作。

我发现我将在路由器上使用端口转发,将其用于客户端和服务器中使用的同一端口,并将其转发到我的机器(即服务器)的IP。 我也发现我要注意防火墙。

在我的原始媒体集线器路由器上,我已使用(4444)端口将端口im转发给了端口im,并将协议TCP传输到我的计算机的本地IP(192.168.0.21)。 我还确保没有端口被阻塞。

对于防火墙,我确保未启用Windows防火墙并关闭了我的卡巴斯基反病毒防火墙。

到目前为止,这还不允许我与vmware机器通过LAN进行通信。

这是套接字和服务器套接字的代码;

客户:

int portNumber = 4444;
InetAddress host = InetAddress.getLocalHost(); // I also did try changing the host to a String and making host = InetAddress.getLocalHost().getHostAddress();
Socket link = new Socket(host, portNumber);

服务器:

int portNumber = 4444;
ServerSocket serverSocket = new ServerSocket(portNumber);
link = serverSocket.accept();

知道我做错了什么,还是错过了什么?

使用该代码( InetAddress host = InetAddress.getLocalHost(); ),您的客户端将始终与本地主机联系,这显然不是您想要的(而是在本地工作的解释...

我可以建议有关客户端-服务器通信的官方Oracle教程吗?

假设您的远程系统的IP地址为192.168.0.100,则您的代码将为

int portNumber = 4444;
String host = "192.168.0.100"; // Socket also has a constructor that accepts
                               // as String where you can either input a hostname or
                               // an IP address
Socket link = new Socket(host, portNumber);

Socket Javadoc 在这里

编辑:程序中的主要缺陷是根据Javadoc使用了InetAddress.getLocalHost()

返回本地主机的地址 这是通过从系统中检索主机名,然后将该名称解析为一个InetAddress来实现的。

强调我的。 因此,是的,您的程序将在本地计算机上运行,​​但不能在远程计算机上运行。 我的答案的本质不是我使用字符串,而是我使用本地主机...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM