編寫一個聊天程序(就像很多人一樣),我發現我希望能夠讓客戶端自動連接到服務器。將服務器IP自動獲取到客戶端
但是,服務器的IP地址不會是永久性的,所以我不能只是硬核入程序
在TCP,我在尋找某種廣播功能,它允許客戶端知道服務器在哪裏
任何想法?
編輯:應該說,這將是隻是一個LAN程序 - 沒有外界的連接
編寫一個聊天程序(就像很多人一樣),我發現我希望能夠讓客戶端自動連接到服務器。將服務器IP自動獲取到客戶端
但是,服務器的IP地址不會是永久性的,所以我不能只是硬核入程序
在TCP,我在尋找某種廣播功能,它允許客戶端知道服務器在哪裏
任何想法?
編輯:應該說,這將是隻是一個LAN程序 - 沒有外界的連接
使用DNS。解析應用中的主機名並連接到它解析的IP。你需要dynamic DNS,因爲你說IP不是永久的。
使用下面的過程中找到服務器的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"];
如果你在談論一個局域網聊天,你不能或不由於某種原因想要使用DNS,您可以實現或查找UPnP使用的發現協議的實現。 SSDP基於UDP廣播。它是afaik,不可能通過TCP多播,因爲TCP需要一個會話。
如果你想通過互聯網使用聊天服務器,你別無選擇,只能使用DNS。尋找一個動態的dns提供者(我使用selfhost.bz)。在C#中,您可以將主機名解析爲IP地址,如其他答案中所述。如果你有一個主機連接到它可能會足以傳遞到插座,但:
socket.Connect("myhostname.selfhost.bz", ...
編輯:既然你說你在一個LAN是,在一些細節SSDP。該協議做的更多,比你實際需要。如果您正在考慮自己實施它,請不要嚴格遵守。讓您的客戶端在指定的端口上發送廣播。一旦接收到消息,服務器將永久地偵聽該端口,並用預定義的消息進行回答。當客戶收到該答案時,它會知道發件人是有效的服務器。
我應該說,沒有外部連接將是可能的,所以沒有問題在那裏... – LordAro
如何使用DNS? – dugas
PLZ確認,如果你meant..ABC與XYZ和ABC聊天應該能夠看到XYZ的IP,反之亦然..和兩者都LAN連接? –
不大: ABC和DEF連接到服務器XYZ。他們既可以相互交談,但他們能做到這一點之前,他們需要知道XYZ的IP,使他們能夠連接到它 – LordAro