Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过局域网与TCP/IP进行Java聊天_Java_Sockets_Networking_Tcp - Fatal编程技术网

通过局域网与TCP/IP进行Java聊天

通过局域网与TCP/IP进行Java聊天,java,sockets,networking,tcp,Java,Sockets,Networking,Tcp,我在Java中开发了一个使用TCP/IP进行聊天的应用程序。到目前为止,它在同一台机器上运行服务器和客户机时可以完成这项工作,但是我想让它在局域网上工作 我发现我将在我的路由器上使用端口转发,与我在客户端和服务器中使用的端口相同,并将其转发到我机器的IP(即服务器)。我还发现我应该小心防火墙 在我的virgin media hub路由器上,我使用TCP协议(4444)将端口im转发到我机器的本地IP(192.168.0.21)。我还确保没有端口被阻塞 对于防火墙,我已确保未启用windows防火

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

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

在我的virgin media hub路由器上,我使用TCP协议(4444)将端口im转发到我机器的本地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();
你知道我做错了什么,或者遗漏了什么吗?

用这段代码(
InetAddress host=InetAddress.getLocalHost();
)你的客户端会一直联系localhost,这显然不是你想要的(但解释一下为什么它在本地工作

我可以推荐官方的客户端-服务器通信吗

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

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

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


强调我的。因此,是的,你的程序将与本地计算机一起工作,但与远程计算机一起工作。我的答案是我使用字符串,但我使用本地主机…

哦,对不起,我忘了提到我也尝试过将主机更改为字符串并使host=InetAddress.getLocalHost().getHostAddress();这应该会产生与您上面建议的相同的功能,但这并不能解决问题,但是……您不想连接到本地主机?不幸的是,它也不能按您的方式工作:/因为对我的vmware机器的ping超时,我决定查看我父亲的pc,将他的主机设置为“192.168.0.8”,但它不起作用。无论如何,非常感谢您对此进行研究,peace。@Adrian,我重复我自己的话,但是:
我可以推荐Oracle关于客户机-服务器通信的官方教程吗?
这里提供的应用程序或多或少满足了您的需求,因此我认为这是一个很好的工作起点,可以从中学习。