c#peer to peer programming(最好是分散的)

时间:2011-12-22 09:03:12

标签: c# .net sockets

我正在编写一个应用程序来共享内容。你有一个“同行”列表。您可以选择其中一些,然后就可以开始共享内容(文本和二进制数据)。在局域网上,如果输入其他人的IP地址,则可以进行通信。

我有几个问题

  1. 是否有一些模式来编写这种类似聊天的应用程序,可以发现谁在线,谁不在(本地和互联网上)?我知道这可以通过一个集中的服务器来完成,所有服务器都可以连接到分布式服务器,尤其是当你在局域网上时。

  2. 当连接到在线客户端时,他们大多没有IP地址,但是相当落后于防火墙和东西,显然IP地址不是机器的地址,一些端口将被阻止。这是怎么回事?

  3. PS: 我已经在这个问题上阅读了很多stackoverflow页面。有人说这是可能的,有人说不是。现在真的确定要采取哪一个。有些甚至有关于c#bit torrent客户端和服务器的信息。只要我能在.net中做到这一点,我就非常乐于接受建议。 (c#,f#,vb都可以)

    任何建议都将不胜感激。

    问候

2 个答案:

答案 0 :(得分:1)

发现意味着一个终点必须能够找到其他终点。在LAN上,如果在网络层上允许广播(UDP),则可行。典型情况是SNMP管理器广播SNMP GET消息,并查看同一网络中有多少SNMP代理响应。这是分散的,因为没有中央登记点,其中存储了所有终点的列表。

然而,超越局域网意味着没有像广播这样的简单方法来寻找其他终点。然后需要一个集中的解决方案。

因此,请进一步总结所有层(应​​用程序,网络等)中应用程序的方案,以了解是否有可用的分散式解决方案。此外,当您在某处阅读其他人的结论时,您还应该注意他/她提到的特殊情况。这些结论可能仅对这些情况有效。

答案 1 :(得分:0)

如果您需要中央服务器(registration.mydomain.com),那么一个解决方案如下: 1.对等方通过“我在这里,这是我的详细信息”消息连接到中央服务器。 2.服务器记录对等体的IP地址和端口。 3.对等方从服务器请求其他对等方的列表。 4.对等体使用提供的列表直接连接到其他对等体。

每个对等体应该向服务器发送更新以指示它们是否仍然存在 - 或者服务器有时可能尝试连接到每个对等体(并非总是可以与所有Web服务器连接)来确定信息本身。

每个对等方还应定期向服务器询问更多对等方,以防任何连接或断开连接,尽管后者可能会在您的套接字中显而易见,除非您正在广播。