-1

因此,我花了很多年(断断续续地)阅读 .NET 中的套接字和东西,并编译了许多示例代码和所谓的聊天客户端工作示例——但没有一个有效。

大多数时候我什至无法让它在本地主机上工作。过去大部分时间人们都说“你的代码看起来不错,它应该可以工作”,这通常会导致他们说我的 ISP 可能会阻塞某些端口或其他什么。

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

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

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

  1. 是否所有的客户端都只是连接到一些 Web 服务,它只是反馈它收到的任何消息?

  2. 或者,当您通过聊天客户端注册并登录服务时,这些聊天客户端是否会存储您的 IP 地址,如果您保存了联系人,它会查找他们的 IP 地址以知道将您的消息发送到哪里?

我可以继续阅读,但我真的很想要一个直截了当的答案,如果可能的话,因为有很多方法可以制作聊天客户端,我觉得可能会有很多正确的答案。

那么,大佬们是怎么做到的呢?他们怎么知道将消息发送到哪里?(他们是否存储 IP 供以后使用?)

4

6 回答 6

2

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

于 2013-06-27T15:16:46.663 回答
1

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

“大人物”使用客户端 - 服务器模型,因此它接近您问题中的选项#1。

于 2013-06-27T15:13:26.950 回答
1

简短的回答:是的,nr.1。服务必须使用它的某种变体,因为 IP 可以更改等。基本上,您每次都需要在某个地方找到 IP。

于 2013-06-27T15:13:56.577 回答
1

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

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

于 2013-06-27T15:14:12.983 回答
1

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

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

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

于 2013-06-27T15:18:02.997 回答
1

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

如果要创建主机名:

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

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

每次 IP 更改时,让您的路由器或 PC 使用主机的公共 IP 更新 DNS 提供商。一些 ISP 可以给你一个静态 IP(更昂贵),但大多数时候他们给你一个动态 IP,每次重置路由器时,公共 IP 都会改变,有时他们会分配给你相同的 IP。

那些大人物就是这样做的,或者多或少,我想他们有自己的 DNS 服务器等。但这就是想法。

看看 www.dyndns.org

于 2013-06-28T09:46:39.893 回答