首页 文章

通过LAN与TCP / IP进行Java聊天

提问于
浏览
1

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

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

在我的处女媒体中心路由器上,我有端口使用(4444)转发端口即时,协议TCP到我的机器的本地IP(192.168.0.21) . 我还确保没有端口被阻止 .

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

到目前为止,这还没有让我通过局域网与我的vmware机器进行通信 .

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

客户:

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

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

1 回答

  • 2

    使用该代码( 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);
    

    套接字Javadoc here

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

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

    强调我的 . 所以,是的,您的程序将与本地计算机一起使用,但与远程计算机一起使用 not . 我的答案的基本是 not ,我使用一个字符串,但我 don't 使用localhost ...

相关问题