2012-08-28 3 views
2

기본 채팅 응용 프로그램을 개발하려고합니다. 서버와 클라이언트 모두에 필요한 코드를 작성 했으므로 애플리케이션은 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) 
+0

통화 및 포트를 차단하는 방화벽이 열려 있지 않은지 확인하십시오. – kosa

+0

글쎄, 내가 말했듯이, 포트는 이미 열려 있고 어떤 방화벽도 그것을 막지 못하고있다. 방화벽이 클라이언트의 나가는 요청을 차단할 수 있습니까? 그렇다면 어떻게 확인할 수 있습니까? – etua

+1

라우터에서 올바른 내부 주소로 포트를 전달하고 있는지 확인하십시오. 정적으로 설정하지 않은 경우 경고없이 로컬 주소가 변경됩니다. – Wug

답변

1

당신이

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

를 사용해야합니다.

+0

이 변경 작업을 수행 했으므로 포트 23을 통해 문제없이 연결할 수 있습니다. 고맙습니다. 하지만 포트 6000은 여전히 ​​문제를 일으 킵니다. 6000은 현명한 포트 선택이 아닙니다. 내가 아직도 23을 지키거나 5192와 같은 가짜 항구를 찾아야한다고 생각하니? – etua

+0

NAT/방화벽 구성을 확인 했습니까? 포트 포워딩 문제가있는 경우이 http://netcallback.sourceforge.net을 시도하십시오. –

+0

TeamViewer를 통해 서버 컴퓨터를 사용하고 있으며 단일 설정을 변경하는 데 너무 오래 걸립니다. 그래서, 두 시간 후에 나는 집에 도착할 것이다. 그리고 나는 다른 항구의 묶음을 시험해 볼 것이다. 23보다 다른 포트를 통해 연결할 수 없다면 내가 제안한 링크를 확인하고 여기에 게시 할 것입니다. – etua