기본 채팅 응용 프로그램을 개발하려고합니다. 서버와 클라이언트 모두에 필요한 코드를 작성 했으므로 애플리케이션은 LAN을 통해 완벽하게 작동합니다. 그러나 인터넷을 통해 작동하도록 만들려고 할 때 막혔습니다. 서버 컴퓨터에서 포트 포워딩을해야한다는 것을 알았습니다. 나는 항구 6000을 보내고 canyouseeme.org는 성공적인 메시지를 주었다. 따라서 포트가 열려 있고 방화벽이 방화벽을 막지 않습니다. 그러나 클라이언트 코드를 연결할 수 없습니다.인터넷상의 Java 채팅 응용 프로그램 | ConnectException (연결 시간 초과)
InetAddress IP = InetAddress.getLocalHost();
welcomeSocket = new ServerSocket(6000, 10, IP);
connectionSocket = welcomeSocket.accept();
그리고 클라이언트 코드는 주로 다음과 같은 코드를 사용하여 연결을 시도 :
clientSocket = new Socket("xx.xxx.xxx.xx", 6000);
(그 정의가 이전에 만든) 다음과 같이
서버 코드는 ServerSocket의 열립니다 xx.xxx.xxx.xx는 서버 시스템의 IP 주소입니다 (192.168.xx가있는 로컬 IP 주소는 아닙니다).
이것은 Java 이슈입니까? 포트 6000이 열려 있고 canyouseeme.org가 성공적으로 연결할 수 있기 때문에 묻습니다. 그러나 클라이언트가 실패합니다. 왜 그런 일이 일어 났습니까? 어떤 도움을 주시면 감사하겠습니다 (자세한 내용은 아래의 의견을 읽어주십시오).
오류 메시지
은 다음과 같습니다 :addr
서버의 공용 주소이고
port
가 결합 된 서버입니다 클라이언트에
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