如何在 Java 中设置客户端/服务器?

Posted

技术标签:

【中文标题】如何在 Java 中设置客户端/服务器?【英文标题】:How do I set up a client/server in Java? 【发布时间】:2013-03-09 10:41:30 【问题描述】:

所以我编写了一个使用 Socket 和 ServerSocket 类的程序。但是,如果服务器和客户端都在同一台机器上,并且客户端连接到 localhost (127.0.0.1),我只能连接到我的服务器。即使两者在同一台机器上,我也无法使用常规 IP 地址进行连接:我必须使用 127.0.0.1。如何设置服务器以便我可以从任何计算机连接到它?

我正在使用 Java 网络教程程序 (http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html)。

这是来自客户端的堆栈跟踪: java.net.ConnectException:连接超时:连接 在 java.net.DualStackPlainSocketImpl.connect0(本机方法) 在 java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69) 在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 在 java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157) 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) 在 java.net.Socket.connect(Socket.java:579) 在 java.net.Socket.connect(Socket.java:528) 在 java.net.Socket.(Socket.java:425) 在 java.net.Socket.(Socket.java:208) 在 client.Client.connect(Client.java:38) 在 client.ClientUI$2.mouseClicked(ClientUI.java:87) 在 java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:269) 在 java.awt.Component.processMouseEvent(Component.java:6508) 在 javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 在 java.awt.Component.processEvent(Component.java:6270) 在 java.awt.Container.processEvent(Container.java:2229) 在 java.awt.Component.dispatchEventImpl(Component.java:4861) 在 java.awt.Container.dispatchEventImpl(Container.java:2287) 在 java.awt.Component.dispatchEvent(Component.java:4687) 在 java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 在 java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501) 在 java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 在 java.awt.Container.dispatchEventImpl(Container.java:2273) 在 java.awt.Window.dispatchEventImpl(Window.java:2719) 在 java.awt.Component.dispatchEvent(Component.java:4687) 在 java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729) 在 java.awt.EventQueue.access$200(EventQueue.java:103) 在 java.awt.EventQueue$3.run(EventQueue.java:688) 在 java.awt.EventQueue$3.run(EventQueue.java:686) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 在 java.awt.EventQueue$4.run(EventQueue.java:702) 在 java.awt.EventQueue$4.run(EventQueue.java:700) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:699) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:91) Java 结果:-1

【问题讨论】:

问题与这篇文章类似...***.com/questions/7411302/… 您是否通过测试禁用了您的个人防火墙? 【参考方案1】:

很遗憾,您既没有发送代码也没有发送堆栈跟踪,因此不可能发现您的问题。

但是我可以假设您可能被您计算机上运行的个人防火墙阻止了。这是从一台机器移动到两台机器时的典型问题。发现这一点:首先在两台机器上停止防火墙(如果它正在运行)。如果它有助于配置允许您的客户端连接到您的服务器的规则(在防火墙规则中配置端口和可能的 IP。)

【讨论】:

【参考方案2】:

检查您的操作系统防火墙和您的防病毒程序,其中也可能包含防火墙。正如 AlexR 建议的那样,您可以禁用所有防火墙和防病毒软件,然后如果连接成功,您可以将允许连接所需的规则添加到防火墙...

【讨论】:

以上是关于如何在 Java 中设置客户端/服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .Net 服务中设置 maxArrayLength?

如何在 ServiceAuthorizationManager 中设置身份/用户名?

如何在 Qt 中设置嵌入式 MySQL 客户端

如何在Apache HttpClient中设置TLS版本

如何在 Ruby 的 RestClient gem 中设置超时?

流动客户端主题时如何在 C# HttpClient 中设置 OIDC/OAuth 不记名令牌