p2p网络(对等网络):对等网络是一种网络结构的思想。它与目前网络中占据主导地位的客户端/服务器结构的一个本质区别是,整个网络结构中不存在中心节点。在P2P结构中,每一个节点(peer)大都同时具有信息消费者、信息提供者和信息通讯等三方面的功能。从计算模式上来说,P2P打破了传统的C/S模式,在网络中的每个节点的地位都是对等的。每个节点既充当服务器,为其他节点提供服务,同时也享用其他节点提供的服务。
从技术层面讲,p2p网络中每个节点既充当服务端又充当了客户端,同时每个节点需要记录当前网络中所有的节点信息,既可以广播,又可以点对点通信。
要实现上面的特征,每个p2p节点需要有一个服务进程来接收每个节点所发送的数据,这是一个p2p节点所必须的。先看看网络效果图:
该实现是基于Linux的,服务端使用了epoll模型。当一个节点上线以后,给相邻节点通知上线节点的地址和端口,相邻节点通过广播该信息让网络中的所有在线节点直到,通知返回给上线节点所有节点的地址和端口。实验环境使用的是Linux版本的CLion,这样启动一个节点只需要在左上角的Edit Configurations中配置当前节点的ip和port,是否为初创节点,临近节点,而不用再去使用g++ --...bulabula再去实验。上图启动了8和节点。
需要资源请点击 p2p网络(c++版)下载
需要注意的是:如果在终端中编译好以后需要填写参数:一共有5个参数
127.0.0.1 8882 0 127.0.0.1 8881
参数1:127.0.0.1 为当前节点启动的ip
参数2:8882为当前节点启动的端口
参数3:0代表不是初创节点,1为初创节点。初创节点是p2p网络中第一个启动的节点。
参数5:127.0.0.1为临近节点的ip
参数6:8881为临近节点的port
在终端编译注意使用C11标准和pthread线程库。