我想在C#中启动一个简单的windowsP2P即时消息,类似于AOL、ICQ等,但更简单(两个人之间的纯文本消息(
我不需要如何做的例子。我自己可以找到。
我真正需要的是对即时消息(P2P,而不是多帽(的工作原理有一个大致的了解,而没有很多技术细节。
例如:
-
我是否需要一个主服务器来实现user1和user2之间的通信,或者user1可以直接将字符串发送给user2?这是怎么叫的?
-
如果用户1已登录,他如何知道来自另一个用户的传入消息(或他们朋友的在线状态(?聊天客户端应用程序是否每隔X秒与主服务器进行一次检查?
任何可能帮助我理清一般数据流想法的线索都将不胜感激。如果你找到了一个可以分享的流程图,那么流程图也会很有帮助。
提前谢谢。
更新(新问题(-7月6日
假设用户已经成功登录,应用程序现在需要获取并填充联系人列表(保存在我的apache/php/mysql服务器上(。
-
您将如何实现数据检索(重要(以及稍后的联系人列表填充?WebClient.DownloadString[Anc]是一个好方法吗?有更好的方法吗?
-
应用程序应多久检查一次更新的列表(联机/脱机状态(。接受建议。
-
如何在C#.NET上解析JSON数据(Visual C#Studio 2010(我将获得JSON字符串。
谢谢!
如果你真的想构建一个p2p应用程序,就不应该有服务器。然而,这并不简单。
创建聊天系统有很多不同的方法,主要涉及服务器。研究comet(如果实现得当,这是一个很好的解决方案,否则就很糟糕(、轮询(每x秒检查一次(或使用套接字,但有很多问题需要考虑,还有一些注意事项,尤其是防火墙/nat路由器。套接字解决方案可能是"p2p",但轮询和彗星解决方案不是。
对于您的用例,我会使用一个简单的套接字解决方案(一侧作为服务器,一侧作为客户端(,并通过在服务器端打开端口来配置路由器防火墙。
您可以扩展它,使双方都可以是服务器(在端口上侦听(和客户端,这样您就可以互相"调用"。
你需要有一个永久的ip,或者使用像dyndns这样的服务才能正常工作。
更新
是的,DownloadString或DownloadStringAsync是一个不错的方法。多久一次真的取决于你。我假设这只是针对你在问题中所说的少数用户,所以你不需要担心服务器过载。一分钟一次听起来很合理,但如果你有这种想法,一秒钟一次也很好。。。在.NET中解析JSON可以回答您的最终查询。