2011-03-19 4 views
1

, 나는 다른 라우터에서 서버에 연결을 시도하는 이상한 예외가 발생했습니다 연결 호스트가 응답하지 않아 확립 된 연결이 실패했습니다. "이상한 C#은 SocketException이

클라이언트는 로컬 네트워크에서 서버에 완벽하게 연결할 수 있지만 인터넷을 통해 연결하면 작동하지 않습니다.

포트 1250 (사용중인 포트)을 전달하고 SimplePortForwarding (http://www.simpleportforwarding.com/)을 사용하여 포트가 열려 있고 작동하는지 확인했습니다. 무엇이 잘못되었는지 http://www.developerfusion.com/article/3918/socket-programming-in-c-part-1/

어떤 생각 :

나는이 튜토리얼에 내 구현을 기반으로? 감사합니다.

public String connect(String ipAddress, int port) 
    { 
     lock(_locker) 
     { 
      if (!_connecting) 
      { 
       _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
       IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse(ipAddress), port); 

       try 
       { 
        _socket.Connect(endpoint); 
        _connected = true; 
        waitForData(); 

        _eventManager.queueEvent(new PlayerJoinedEvent(PlayerJoinedEvent.PLAYER_JOINED, name)); 
       } catch (SocketException e) 
       { 
        // Exception is thrown HERE 
        return e.Message; 
       } 
      } 
     } 

     return ""; 
    } 
+1

그냥 예외적 인 예외를 일반적으로 연결 시간 초과라고합니다. –

+0

죄송합니다, 어제 모든 소켓 프로그래밍을 한 적이 처음입니다. – user434565

+0

어떤 IPAddress에 연결하고 있습니까? 로컬 LAN의 IP 주소는 일반적으로 인터넷 IP 주소와 다릅니다. LAN 및 인터넷 모두에 대해 동일한 IP 주소를 사용하면 설정 한 IP 주소의 유형에 따라 그 중 하나만 작동합니다. –

답변

0

연결할 수없는 경우가 아니면 서버 IP 주소가 public인지 확인하십시오.

개인 주소 공간으로는 link을 확인하십시오.

0

당신은 서버 또는 클라이언트 라우터에서 포트 1250을 열어 : 클라이언트 코드에 연결되어 여기

public void startListening(int port) 
    { 
     lock(_locker) 
     { 
      _listeningSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

      try 
      { 
       // Bind socket to local endpoint, and listen for incoming connections 
       IPEndPoint ipEndpoint = new IPEndPoint(IPAddress.Any, port); 
       _listeningSocket.Bind(ipEndpoint); 
       _listeningSocket.Listen(10); 

       waitForNewClient(); 

       // successfully started listening 
       _isListening = true; 

      } catch (SocketException e) 
      { 
       // failed for some strange reason 
       _isListening = false; 
      } 
     } 
    } 

:

여기 서버는 방법 듣다입니까? 그것은 서버 라우터에서 열어야합니다. 서버가 DMZ 포트에 연결되어 있고 서버 라우터에서 DMZ가 활성화되어 있는지 확인해야 할 수 있습니다.

희망이 도움이됩니다.

0

I 문제가 해결되었습니다.

내가 사용하는 IP 주소는 ipconfig에서 가져온 내부 IP 주소이지만 외부 주소는 외부 주소인데 http://www.whatsmyip.org/과 같은 서비스에서 가져온 IP 주소입니다.

나는 왜이 두 숫자가 다른지 혼란 스럽습니다.

+0

정확히 내 대답에 대해 이야기하고 있습니다. ;) 라우터가 할당 한 개인 주소를 사용 중이며 클라이언트가 같은 네트워크에 있지 않으면 연결할 수 없습니다. (즉, 동일한 라우터 아래에 있음). 자세한 내용은이 링크를 참조하십시오. http://www.wisegeek.com/what-is-the-difference-between-public-and-private-ip-addresses.htm – young

관련 문제