gpt4 book ai didi

java - Internet 上的 Java 聊天应用程序 | ConnectException(连接超时)

转载 作者:行者123 更新时间:2023-11-30 11:41:41 24 4
gpt4 key购买 nike

我正在尝试开发一个基本的聊天应用程序。我已经为服务器和客户端编写了所需的代码,应用程序在 LAN 上运行得非常好。然而,当我试图让它在 Internet 上运行时,我遇到了困难。我了解到我需要在服务器机器上进行端口转发,然后我就这样做了。我转发了6000端口,canyouseeme.org给了一个成功的信息。因此,该端口肯定是打开的,并且没有防火墙阻止它。但是,客户端代码无法连接到它。

服务器代码打开一个 ServerSocket 如下(它们的定义在之前):

InetAddress IP = InetAddress.getLocalHost();
welcomeSocket = new ServerSocket(6000, 10, IP);
connectionSocket = welcomeSocket.accept();

客户端代码主要使用以下代码尝试连接到它:

clientSocket = new Socket("xx.xxx.xxx.xx", 6000);

其中 xx.xxx.xxx.xx 是服务器机器的 IP 地址(不是本地 IP 地址为 192.168.x.x)。

这是 Java 问题吗?我问是因为端口 6000 显然是打开的并且 canyouseeme.org 可以成功连接到它,但我的客户端没有这样做。为什么会发生这样的事情?任何帮助将不胜感激(有关更多信息,请阅读下面的评论)。

错误信息如下:

java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:180)
at ChatPanel$ConnectButtonListener.actionPerformed(ChatPanel.java:206)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

最佳答案

在你应该使用的客户端上

clientSocket = new Socket(InetAddress.getByAddress(addr), port);

addr 是服务器的公共(public)地址,port 是绑定(bind)的服务器。

关于java - Internet 上的 Java 聊天应用程序 | ConnectException(连接超时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12166350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com