2012-10-27 5 views
5

netowrk 앱을 빌드하려고합니다. 패키지를 보내고받는 서버를 성공적으로 만들었습니다. 지금까지 127.0.0.1 (집과 같은 장소 없음)을 가리키는 한 대의 컴퓨터에서 테스트가 수행되었습니다. 이제 네트워크로 전환하고 싶습니다. LAN 네트워크에서 특정 포트를 수신하는 컴퓨터를 어떻게 찾을 수 있습니까?네트워크에서 열려있는 TCP 포트 찾기

+0

127.0.0.1 대신 해당 컴퓨터의 IP 주소를 지정하십시오. – Adil

+0

서브넷 만 신경 쓰거나 다른 서브넷에있는 사용 가능한 컴퓨터가 있는지 확인하고 싶습니까? –

+0

그래,하지만 내 질문은 실제 포트를 찾는거야. 그렇게하면 IP를 하드 코딩하지 않고도 사용할 수 있습니다. – Samyn

답변

4

서비스가 알려진 포트에서 broadcast messages을 청취해야합니다 (실제로 올바르게 작동하려면 register the program and port number with the IANA). 브로드 캐스트 메시지를 들으면 서버의 IP와 서비스의 포트에 응답합니다. 들어오는 연결을 듣고.

위의 링크에서 간단한 예제를 볼 수 있습니다. 연결된 콘솔과 포트에서 출력하지만이 정보를 사용하여 두 끝점간에 TCP 또는 UDP 연결을 설정할 수 있습니다. 여기 psudo의 예를 들어


using System; 
using System.Net; 
using System.Net.Sockets; 
using System.Text; 
class RecvBroadcst 
{ 
    public static void Main() 
    { 
    Socket sock = new Socket(AddressFamily.InterNetwork, 
      SocketType.Dgram, ProtocolType.Udp); 
    IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050); 
    sock.Bind(iep); 
    EndPoint ep = (EndPoint)iep; 
    Console.WriteLine("Ready to receive…"); 
    byte[] data = new byte[1024]; 
    int recv = sock.ReceiveFrom(data, ref ep); 
    string stringData = Encoding.ASCII.GetString(data, 0, recv); 
    Console.WriteLine("received: {0} from: {1}", 
       stringData, ep.ToString()); 
    data = new byte[1024]; 
    recv = sock.ReceiveFrom(data, ref ep); 
    stringData = Encoding.ASCII.GetString(data, 0, recv); 
    Console.WriteLine("received: {0} from: {1}", 
       stringData, ep.ToString()); 
    sock.Close(); 
    } 
} 

내가 그것을 할 것입니다 방법에 대한 일련의 이벤트입니다.

이 예에서는 IP가 192.168.1.0이고 서브넷이 255.255.255.0 인 네트워크를 만들 수 있습니다. Server1192.168.1.2이고 서비스는 1234이고 수신은 Server2이고 서비스는 192.168.1.3이고 포트는 4567입니다. 둘 다 포트 3000에 브로드 캐스트 메시지를 표시합니다. 접속 클라이언트 192.168.1.4

  1. 클라이언트는 dynamic port range (49152-65535)에서 임의의 포트를 선택하고 (이 예에서 포트 50123)를 UDP에 결합하고 수신하는 IP에있을 것이다.
  2. 클라이언트는 수신 대기중인 동일한 포트를 사용하여 브로드 캐스트 주소와 로컬 서브넷 (192.168.1.255:3000)의 알려진 포트로 브로드 캐스트합니다. 그는 어떤 종류의 페이로드를 보내 서버가 사용자와 동일한 포트를 사용하는 다른 사람 대신 클라이언트에게만 다시 전송합니다. (Send me your info for XYZ app! 문자열을 보냅니다)
  3. Server1이 브로드 캐스트를 수신합니다. 메시지가 Send me your info for XYZ app!인지 확인하고 UDP 메시지 Name:Server1 IP:192.168.1.2 Port:1234을 보낸 사람의 원본 포트 및 IP 조합 (192.168.1.4:50123)
  4. 으로 다시 보냅니다. Server2도 브로드 캐스트를받습니다. 메시지가 Send me your info for XYZ app!인지 확인하고 UDP 메시지 Name:Server2 IP:192.168.1.3 Port:4567을 보낸 사람의 원본 포트 및 IP 조합 (192.168.1.4:50123)
  5. 으로 다시 보냅니다. 클라이언트는 메시지를 보낸 동일한 포트에서 두 개의 UDP 메시지를받습니다. 그는 답장을 분석하고 연결할 수있는 두 서버를 사용자에게 표시합니다.
관련 문제