我正在嘗試開發一個基本的聊天應用程序。我已經爲服務器和客戶端編寫了所需的代碼,並且該應用程序在局域網上運行得非常好。但是,當我試圖通過互聯網工作時,我陷入了困境。我瞭解到我需要在服務器機器上進行端口轉發,並且我這樣做了。我轉發了端口6000和canyouseeme.org給了一個成功的消息。所以,端口肯定是開放的,沒有防火牆阻止它。但是,客戶端代碼無法連接到它。通過互聯網在Java中聊天應用程序| ConnectException(連接超時)
服務器代碼打開一個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)。
這是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)
確保沒有防火牆阻止呼叫和端口打開。 – kosa
那麼,正如我所說,端口已經打開,沒有防火牆阻止它。防火牆可以阻止客戶端的傳出請求嗎?如果是這樣,我該如何檢查它? – etua
確保您將端口轉發到正確的內部地址(從路由器)。如果您尚未將它們設置爲靜態,則本地地址將在未發出警告的情況下更改。 – Wug