C#P2P Instant Messenger一般基础帮助

时间:2011-07-04 06:50:49

标签: c# p2p instant messenger

我想在C#中启动一个简单的Windows 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字符串。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您真的想要构建一个p2p应用程序,那么应该没有服务器。但是,这并不简单。

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

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

您可以对此进行扩展,以便双方都可以是服务器(侦听端口)和客户端,因此您可以互相“呼叫”。

您需要拥有一个永久性IP,或使用像dyndns这样的服务才能使其正常工作。

<强>更新

是的,DownloadString或DownloadStringAsync是一个很好的方法。 多久经常由你决定。我认为这只适用于您在问题中所说的少数用户,因此您无需担心服务器过载。一分钟听起来很合理,但如果你觉得那种倾向,那么每秒一次也会很好...... Parsing JSON in .NET回答你最后的询问。