2012-09-21 78 views
3

編寫一個聊天程序(就像很多人一樣),我發現我希望能夠讓客戶端自動連接到服務器。將服務器IP自動獲取到客戶端

但是,服務器的IP地址不會是永久性的,所以我不能只是硬核入程序

在TCP,我在尋找某種廣播功能,它允許客戶端知道服務器在哪裏

任何想法?

編輯:應該說,這將是隻是一個LAN程序 - 沒有外界的連接

+5

如何使用DNS? – dugas

+0

PLZ確認,如果你meant..ABC與XYZ和ABC聊天應該能夠看到XYZ的IP,反之亦然..和兩者都LAN連接? –

+0

不大: ABC和DEF連接到服務器XYZ。他們既可以相互交談,但他們能做到這一點之前,他們需要知道XYZ的IP,使他們能夠連接到它 – LordAro

回答

1

使用DNS。解析應用中的主機名並連接到它解析的IP。你需要dynamic DNS,因爲你說IP不是永久的。

+0

如何動態域名解析在C#中實現? –

+0

^的確如此。我會需要對方法 – LordAro

+1

剛剛創建的DynDNS帳戶,並創建一個像mychatprogram.dyndns.org主機一定的指導意義,那麼您可以更新IP在服務器自動安裝程序Ø隨時手動進行。 – pmoleri

0

使用下面的過程中找到服務器的IP地址

public string GetIPAddress() 
    { 
    string strHostName = System.Net.Dns.GetHostName(); 
    IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName()); 
    IPAddress ipAddress = ipHostInfo.AddressList[0]; 

    return ipAddress.ToString(); 
    } 

您還可以使用

Request.ServerVariables["LOCAL_ADDR"]; 
+0

那肯定只會得到本地IP地址......? – LordAro

+0

這將得到運行程序的服務器IP ..你可以根據你的需要使用它 –

+0

但是,這仍然會得到IP_after_你連接。我不知道在哪裏連接到 – LordAro

2

如果你在談論一個局域網聊天,你不能或不由於某種原因想要使用DNS,您可以實現或查找UPnP使用的發現協議的實現。 SSDP基於UDP廣播。它是afaik,不可能通過TCP多播,因爲TCP需要一個會話。

如果你想通過互聯網使用聊天服務器,你別無選擇,只能使用DNS。尋找一個動態的dns提供者(我使用selfhost.bz)。在C#中,您可以將主機名解析爲IP地址,如其他答案中所述。如果你有一個主機連接到它可能會足以傳遞到插座,但:

socket.Connect("myhostname.selfhost.bz", ... 


編輯:既然你說你在一個LAN是,在一些細節SSDP。該協議做的更多,比你實際需要。如果您正在考慮自己實施它,請不要嚴格遵守。讓您的客戶端在指定的端口上發送廣播。一旦接收到消息,服務器將永久地偵聽該端口,並用預定義的消息進行回答。當客戶收到該答案時,它會知道發件人是有效的服務器。

+0

我應該說,沒有外部連接將是可能的,所以沒有問題在那裏... – LordAro

0

我有一個想法:剛剛得到的服務器寫的IP地址/端口/不管到什麼地方一個文本文件中(公共)網絡上,而客戶端可以讀取該文本文件

顯然,如果文本文件不存在或爲空,沒有服務器正在運行...

這是一個壞主意?

+0

與以前一樣的問題。該IP地址(您有文本文件的地方)需要在您的應用中永久和硬編碼。 – jman

+0

當然?即使我只是pjt文件在Windows服務器共享的某個地方? \\ servername \ chatserver \ ip.txt?該程序將被集中訪問,而不是被安裝在特定的計算機上 – LordAro

相關問題