【问题标题】:Java Chat with TCP/IP over LAN通过 LAN 使用 TCP/IP 进行 Java 聊天
【发布时间】:2013-10-29 15:41:56
【问题描述】:

我开发了一个使用 Java 中的 TCP/IP 进行聊天的应用程序。到目前为止,它在同一台机器上运行服务器和客户端时完成了这项工作,但是我想让它在 LAN 上工作。

我发现我将在我的路由器上使用端口转发,与我在客户端和服务器中使用的端口相同,并将其转发到我机器的 IP(这将是服务器)。我还发现我要小心防火墙。

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

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

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

这里是socket和server socket的代码;

客户:

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();

知道我做错了什么,或者遗漏了什么吗?

【问题讨论】:

    标签: java sockets networking tcp


    【解决方案1】:

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

    我可以推荐官方的Oracle tutorial关于客户端-服务器通信吗?

    假设您的远程系统的 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 here

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

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

    强调我的。所以是的,您的程序可以在本地计算机上运行,​​但可以在远程计算机上运行。我的回答的要点是我使用字符串,但我使用本地主机。 ..

    【讨论】:

    • 哦,对不起,我忘了提到我也尝试将主机更改为字符串并使 host = InetAddress.getLocalHost().getHostAddress();这应该会产生与您上面建议的功能相同的功能,但这仍然没有解决问题
    • 但是……你不想连接到本地主机?
    • 不幸的是,它也不能按照你的方式工作:/因为对我的 vmware 机器的 ping 超时,我决定看看我父亲的电脑,将他的主机设置为“192.168.0.8” ,但它没有工作。无论如何,非常感谢您对此进行调查,和平。
    猜你喜欢
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多