【问题标题】:C# P2P Instant Messenger General Basis Help [closed]C# P2P Instant Messenger 一般基础帮助 [关闭]
【发布时间】:2011-07-04 06:50:49
【问题描述】:

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

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

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

例如:

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

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

非常感谢任何可能帮助我了解一般数据流概念的线索。 如果您找到可以分享的流程图,也可能会有所帮助。

提前致谢。

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

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

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

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

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

谢谢!

【问题讨论】:

    标签: c# p2p instant messenger


    【解决方案1】:

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

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

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

    您可以扩展它,使双方既可以是服务器(侦听端口)又可以是客户端,这样你们就可以互相“调用”。

    你需要有一个永久的 ip,或者使用像 dyndns 这样的服务来让它正常工作。

    更新

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

    【讨论】:

    • 谢谢!那么如果我使用套接字方法,我们可以说两个用户同时是服务器和客户端吗?还是第一个创建套接字连接的是服务器,另一个是客户端,直到连接关闭?
    • 另外一个问题:要注册登录/注销状态并获取在线好友列表等,我必须使用服务器,唯一的P2P部分是聊天窗口本身,对吗?
    • 双方创建一个监听套接字来监听传入的连接(服务器)。为了与对方建立连接,任何一方都可以连接到对方的监听套接字。
    • 至于知道谁在线......在你的情况下,一方可以定期通知另一方它仍然在那里。这取决于你如何做到这一点。但请注意,这种方法不会扩展。
    • 非常感谢。这确实帮助了我使用我需要使用的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多