2014-04-26 4 views
0

저는 C# 채팅 프로그램을 만들고 있지만 외부 연결에 문제가 있습니다. 동일한 컴퓨터가 서버와 클라이언트로 모두 연결될 때 문제가없는 것처럼 보이지만 한 컴퓨터에서 연결을 호스팅하려고하면 다른 컴퓨터에서 클라이언트로 연결할 수 없습니다. 다음은 관련 코드입니다. 클래스 서버 : public void Connect (string ipAddr, string port) { server = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);다른 컴퓨터에서 내 프로그램을 연결할 수 없습니다.

 IPEndPoint ipLocal = new IPEndPoint(IPAddress.Any, Convert.ToInt32(port)); 

     server.Bind(ipLocal);//bind to the local IP Address... 
     server.Listen(5);//start listening... 

     // create the call back for any client connections... 
     server.BeginAccept(new AsyncCallback(OnClientConnect), null); 
    } 
    public void Disconnect() 
    { 
     server.Close(); 
     server = null; 
     tempSocket = null; 
    } 

    public void OnClientConnect(IAsyncResult asyn) 
    { 
     try 
     { 
      if (server != null) 
      { 
       tempSocket = server.EndAccept(asyn); 

       WaitForData(tempSocket); 

       server.BeginAccept(new AsyncCallback(OnClientConnect), null); 
      } 
     } 
     catch (ObjectDisposedException) 
     { 
      Debugger.Log(0, "1", "OnClientConnect: Socket has been closed."); 
     } 
     catch (Exception e) 
     { 
      MessageBox.Show(e.Message, "OnClientConnect Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 

    } 

클라이언트 클래스 : 공공 무효 연결 (문자열 IPADDR, 문자열 포트) { 클라이언트 = 새로운 소켓 (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint ipe = 새 IPEndPoint (IPAddress.Parse (ipAddr), Convert.ToInt32 (port)); client.Connect (ipe);

 clientListener = new Thread(OnDataReceived); 
     isEndClientListener = false; 
     clientListener.Start(); 
    } 

여기에 무슨 문제가 있는지 잘 모르겠습니다. 당신이 무엇이 잘못되었는지 말해 줄 수 있기를 바랍니다.

+0

두 가지 답변 모두에 감사드립니다. :) – user3576453

답변

1

문제는 코드와 관련이 없습니다. 네트워크 외부의 다른 사람들이 사용자에게 연결되도록하려면 연결하려는 포트를 라우터에 포워딩해야합니다. 많은 자습서 here을 찾을 수 있습니다. this 도구를 통해 연결 상태를 확인할 수도 있습니다. 위키

:

포트 포워딩은 원격 컴퓨터 (예를 들어, 인터넷에서 컴퓨터가) 개인 로컬 영역 네트워크 (LAN) 내에서 특정 컴퓨터 또는 서비스에 연결할 수 있습니다.

채팅 서버에 연결하려면 라우터를 통한 연결을 허용해야합니다.

0

컴퓨터에 공용 IP 주소 (라우터에이 옵션이 있음)를 지정하거나 라우터에서 포트 전달을 구현해야합니다.

공용 IP 주소는 라우터 중 하나입니다. 이 사이트에서 공용 IP whatismyipaddress.com을 찾으십시오. 라우터는 공용 IP 주소를 컴퓨터에 제공하는 옵션을 지원할 수도 있고 지원하지 않을 수도 있지만 라우터는 포트 포워딩을 수행 할 수 있어야합니다. (특정 포트의 데이터를 특정 컴퓨터로 전달하면 누군가가 공용 IP에 연결할 때 예를 들어 93.93.93.93:3333이 PC로 전달됩니다.)

+0

이 작업을 수행하는 방법에 대한 정보를 좀 주시겠습니까? 공개 IP 주소가 무엇인지 설명하는 기사에 대한 링크일까요? –

+0

공용 IP 주소가 라우터 중 하나입니다. 이 사이트에서 공용 IP http://whatismyipaddress.com/을 확인하십시오. 라우터는 공용 IP 주소를 컴퓨터에 제공하는 옵션을 지원할 수도 있고 지원하지 않을 수도 있지만 라우터는 포트 포워딩을 수행 할 수 있어야합니다. (특정 포트에서 특정 컴퓨터로 데이터를 전달하므로 누군가가 공용 IP에 연결하면 93.93.93.93:3333과 같이 PC로 전달됩니다) – leskovar

관련 문제