基本的なチャット アプリケーションを開発しようとしています。サーバーとクライアントの両方に必要なコードを書きましたが、アプリケーションは LAN 経由で完全に正常に動作します。しかし、インターネット経由で動作させようとすると、行き詰まりました。サーバーマシンでポート転送を行う必要があることを知り、それを実行しました。ポート 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 アドレスです (192.168.xx のローカル IP アドレスではありません)。
これは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)