1

我想用 C# 启动一个简单的 windows P2P 即时通讯程序,类似于 AOL、ICQ 等,但更简单(两个人之间的纯文本消息)

我不需要关于如何做的例子。我可以自己找到它们。

我需要的是关于即时通讯如何工作(P2P,而不是多聊天)的一般概念,而无需太多技术细节。

例如:

  • 我是否需要一个主服务器来实现 user1 和 user2 之间的通信,或者 user1 可以将字符串直接发送给 user2?这个怎么称呼?

  • 如果 user1 已登录,他如何知道来自另一个用户的传入消息(或他们朋友的在线状态)?聊天客户端应用程序是否每隔 X 秒检查一次主服务器?

任何可能帮助我清除一般数据流想法的线索将不胜感激。如果您找到要分享的流程图,也可能会有所帮助。

提前致谢。

更新(新问题)- 7 月 6 日

假设用户已成功登录,应用程序现在需要获取并填充联系人列表(保存在我的 apache/php/mysql 服务器上)。

  • 您将如何实现联系人列表的数据检索(重要)和后续填充?WebClient.DownloadString[Async] 是一个好方法吗?有没有更好的办法?

  • 应用程序应多久检查一次更新列表(在线/离线状态)。已接受建议。

  • 如何在 C#.NET (Visual C# Studio 2010) 上解析 JSON 数据我将获得 JSON 字符串。

谢谢!

4

1 回答 1

2

如果你真的想构建一个 p2p 应用程序,应该没有服务器。然而,这并不简单。

创建聊天系统有很多不同的方法,主要涉及服务器。研究彗星(如果实施得当,这是一个很好的解决方案,否则很糟糕),轮询(每 x 秒检查一次)或使用套接字,但是有很多问题需要考虑 - 和警告,特别是防火墙/nat 路由器。套接字解决方案可能是“p2p”,但轮询和彗星解决方案不是。

对于您的用例,我将使用一个简单的套接字解​​决方案(一侧作为服务器,一侧作为客户端)并通过在服务器端打开一个端口来配置您的路由器防火墙。

您可以扩展它,以便双方都可以是服务器(侦听端口)和客户端,所以你们都可以互相“调用”。

您需要有一个永久 IP,或使用 dyndns 之类的服务才能使其正常工作。

更新

是的,DownloadString 或 DownloadStringAsync 将是一个很好的方法。多久真的取决于你。我假设这仅适用于您在问题中所说的少数用户,因此您无需担心服务器超载。一分钟一次听起来很合理,但如果您有这种倾向,一秒钟一次可能也可以……在 .NET 中解析 JSON可以回答您的最终查询。

于 2011-07-04T09:00:49.870 回答