在Windows中聊天客户端

时间:2013-06-27 15:10:28

标签: c# .net sockets

所以我花了很多年(开启和关闭)阅读.NET中的套接字和东西,编写了很多很多示例代码和所谓的工作示例的聊天客户端 - 而不是他们中的一个人已经工作了。

大多数时候我甚至无法让它在localhost上工作。过去大多数时候人们都说“你的代码看起来很好,它应该正常工作”,这通常会导致他们说我的ISP可能会阻塞某个端口或其他什么。

但是商业聊天客户端(MSN,Skype等)可以工作。所以必须有办法。

现在我终于让自己的小聊天客户端工作得很好,问题是有人总是需要提供IP地址才能建立连接并开始聊天。

现在我想知道,其他聊天客户端如何知道连接哪个IP?

  1. 是否所有客户端都只是连接到某个网络服务,这只是反馈它收到的任何消息?

  2. 或者当您通过聊天客户端注册并登录服务时,这些聊天客户端会存储您的IP地址,如果您保存了联系人,它将查找其IP地址以了解其中的位置将您的信息发送给?

  3. 我可以继续阅读这个但我真的很喜欢直截了当的答案,如果有可能因为有很多方法可以建立聊天客户端,我觉得可以有很多正确答案。

    那么,大家伙怎么做呢? 他们如何知道将邮件发送到哪里? (他们存储IP以供以后使用吗?)

6 个答案:

答案 0 :(得分:2)

我认为'大家伙'都在使用客户端 - 服务器架构,因此每个客户端在开始聊天之前都必须“登录”服务器,并且通过这样做,它会在那里注册。 然后,服务器路由聊天以从一个客户端到达另一个客户端。我怀疑它是否在两个客户端之间创建了直接套接字连接(至少在MSN,Google Hangouts和Skype中)。

答案 1 :(得分:1)

您的聊天客户端是Peer 2 Peer型号吗?换句话说,客户端是否直接相互连接?如果是这样,那么他们将需要知道其他对等体的IP /主机名,或者他们需要提供一种方式来发布他们的连接信息。使用第二种方法,您即将建立客户端 - 服务器模型。在这种情况下,服务器会跟踪客户端会话并路由消息。

“大家伙”使用客户端 - 服务器模型,所以它接近你问题中的选项#1。

答案 2 :(得分:1)

简短回答:是的,第1号。服务必须使用其中的一些变体,因为IP可以更改等。基本上,您需要每次都在某处找到IP。

答案 3 :(得分:1)

通常,客户端不直接连接,而是使用负责与之通信的服务器。我认为有关MSN协议的文档对您有所帮助。

http://www.hypothetic.org/docs/msn/

答案 4 :(得分:1)

对于IRC或基于telnet的聊天客户端,是的,客户端将连接到中央服务器,该服务器基于频道,PM等来回传递消息,无论中央聊天服务器支持哪些功能。跟踪一些示例代码的简单方法是查找旧的DIKU泥代码或类似的东西。除了MUD服务器强加额外的游戏玩法逻辑外,核心思想与聊天服务器相同。

对于点对点系统,客户端通常仍会连接到中央服务以启动“匹配”会话,然后直接相互连接(一旦完成摇动就放弃他们的中央服务连接)手,大概)。还有一些其他细节使这一点复杂化,例如NAT隧道等等 - 换句话说,你的路由器可能会阻止你朋友的入站连接工作,从而打败了匹配。您的ISP也可能会失败,具体取决于它允许您提供的“服务”。

由于上述NAT /防火墙问题,第一种解决方案通常可以更广泛地兼容各种用户,但它需要更多的服务基础设施来支持。

答案 5 :(得分:1)

您需要的是DNS提供商。当你想连接到那些“大家伙”时,他们在DNS中拥有自己的主机名。例如,当您想要连接到您在www.nasa.org上输入的NASA时,PC将在本地etc / hosts文件中搜索该名称,如果不存在,它将向您指定的DNS发送UDP数据包请求该主机IP的网络配置。

如果您想创建主机名:

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

创建您的DNS主机,server.mydomain.com,server2.mydomain.net等

让您的路由器或PC每次都使用主机的公共IP更新DNS提供商   知识产权的变化。有些ISP可以为您提供静态IP(更昂贵),但大多数情况下它们会为您提供动态IP,每次重置路由器时,公共IP都会发生变化,有时它们会为您分配相同的IP。

这就是那些大家伙的表现,更多的是,我认为他们有自己的DNS服务器等。但这就是主意。

请访问www.dyndns.org