2012-10-27 66 views
5

我在試圖構建一個netowrk應用程序。我成功地製作了一個發送和接收包的服務器。到目前爲止,測試已經在一臺指向127.0.0.1的計算機上完成(沒有像家一樣的地方)。現在我想切換到網絡。我如何找到正在監聽特定端口的LAN網絡上的計算機?在網絡中查找開放的TCP端口

+0

給出該機器的ip而不是127.0.0.1 – Adil

+0

你只關心子網或者你想檢查可能在其他子網中的計算機嗎? –

+0

是的,但我的問題是找到實際的端口。這樣我就可以使用它,而不用硬編碼IP的 – Samyn

回答

4

該服務將需要監聽broadcast messages已知端口上(如果你想成爲真正表現良好,你可以register the program and port number with the IANA),當它聽到它回覆給發送方服務器的IP和服務是什麼端口廣播消息監聽傳入的連接。

下面是一個簡單的例子,從上面的鏈接,這只是打印到控制檯誰連接,並在什麼端口,但您可以使用此信息建立兩個端點之間的TCP或UDP連接。

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(); 
    } 
} 

這裏作爲psudo例子是事件對我會怎麼做它的序列。

對於這個例子,假設我們有一個IP爲192.168.1.0的網絡和一個255.255.255.0的子網。我們有兩臺服務器,Server1192.168.1.2服務偵聽端口1234Server2192.168.1.3端口爲4567服務。兩者都在廣播消息的端口3000上列出。連接客戶端將在IP 192.168.1.4

  1. 客戶選擇在dynamic port range(49152-65535)一個隨機端口並結合到其上的UDP(端口50123對於本示例)並監聽。
  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消息。他解析答覆並向用戶顯示可用於連接的兩臺服務器。