2013-06-27 70 views
-1

所以我花了很多年(在和不在)閱讀關於.NET中的套接字和東西,並編寫了很多很多示例代碼和聊天客戶端的所謂的工作示例 - 而不是其中一人已經工作。Windows中的聊天客戶

大多數時候我甚至無法在localhost上運行它。過去大部分時間人們都說「你的代碼看起來很好,它應該工作」,這通常會導致他們說我的ISP有些東西可能會阻塞某些端口或任何其他東西。

但商業聊天客戶端(MSN,Skype等)的工作。所以必須有一種方法。

現在我終於有了自己的小聊天客戶端工作得很好,問題是總有人需要提供IP地址才能建立連接並開始聊天。

現在我想知道,其他聊天客戶端如何知道連接到哪個IP?

  1. 是否所有客戶端都連接到某個Web服務,它只是反饋接收到的任何消息?

  2. 或者當您通過聊天客戶端註冊並登錄服務時,這些聊天客戶端是否存儲您的IP地址,並且如果您保存了聯繫人,它將查找其IP地址以知道去哪裏把你的信息發送給?

我可以去閱讀有關這一點,但我真的很喜歡一個直接的答案,如果因爲有這麼多的方法,使聊天客戶端這是可能的,我覺得可能有許多正確答案。

那麼,大傢伙怎麼做呢? 他們怎麼知道在哪裏發送消息? (他們是否存儲IP以供以後使用?)

回答

1

您的聊天客戶端是對等2對等模型嗎?換句話說,客戶端是否直接連接?如果是這樣,那麼他們需要知道其他對等方的IP /主機名,否則他們需要提供一種發佈連接信息的方式。採用第二種方法,您即將建立客戶端 - 服務器模型。在這種情況下,服務器會跟蹤客戶端會話並路由消息。

「大傢伙」使用客戶端 - 服務器模型,所以它接近您的問題選項#1。

1

簡答:是的,nr.1。一個服務必須使用這個的一些變體,因爲IP可以改變,等等。基本上,你需要每次找到IP的地方。

+0

謝謝@Kjartan。非常感謝。 –

2

我認爲,「大傢伙」都使用客戶端 - 服務器架構,讓每一個客戶端開始聊天之前,「簽到」到服務器,並通過這樣的寄存器本身就在那裏。 然後,服務器將聊天路由從一個客戶端路由到另一個客戶端。我懷疑它是否會在兩個客戶端之間創建直接套接字連接(至少在MSN,Google Hangouts和Skype中)。

1

對於基於IRC或基於telnet的聊天客戶端,是的,客戶端將連接到中央服務器,中央服務器根據中央聊天服務器支持的功能根據頻道,PM等等來回傳遞消息。追蹤一些示例代碼的簡單方法是查找舊的DIKU泥漿代碼或類似的東西。核心想法與聊天服務器相同,只是MUD服務器強加額外的遊戲邏輯。

對於對等系統,客戶端通常會連接到中央服務以啓動「匹配」會話,然後直接相互連接(一旦完成後放棄其中央服務連接大概握手)。還有一些其他的細節使得這一點變得複雜,比如NAT隧道等等。換句話說,你的路由器可能會阻止你的朋友的入站連接工作,從而打敗了匹配。您的ISP也可能會打敗它,具體取決於您提供的「服務」。

由於上述的NAT /防火牆問題,第一種解決方案通常對各種用戶而言更廣泛的兼容,但它需要更多的服務基礎設施來支持。

1

你需要的是一個DNS提供商。當你想連接到這些「大傢伙」時,他們的主機名在DNS中。例如,當你想連接到NASA時,你輸入www.nasa.org,PC將在本地etc/hosts文件中搜索該名稱,如果它不存在,它將發送一個UDP數據包到指定的DNS網絡配置要求該主機的IP。

如果你想創建你的主機名:

您需要創建自己的域名(即mydomain.net)35-40 $每年。

創建您的DNS主機,server.mydomain.com,server2.mydomain.net等

有你的路由器或PC更新每次 的IP改變主機的公網IP的DNS提供商。一些ISP可以給你一個靜態IP(更昂貴),但大多數時候他們會給你一個動態IP,每當路由器重置時公共IP將會改變,有時他們會爲你分配相同的IP。

這就是這些大傢伙的做法,更多或更少,我想他們有自己的DNS服務器等。但這就是主意。

看看www.dyndns.org