PCP协议实现详解

原创 2006年06月06日 12:13:00

PCP协议,也就是Peercast Protocol,是Peercast用来在节点间传送信息所定义的协议。
协议定义的字段在pcp.h中,本文以如何在节点间传递节点信息(也就是ChanHit)来解释PCP协议的定义
、运行及如何编程。

//ChanHit信息
static const ID4 PCP_HOST  = "host";
static const ID4 PCP_HOST_ID  = "id";
static const ID4 PCP_HOST_IP  = "ip";
static const ID4 PCP_HOST_PORT  = "port";
static const ID4 PCP_HOST_NUML  = "numl";
static const ID4 PCP_HOST_NUMR  = "numr";
static const ID4 PCP_HOST_UPTIME = "uptm";
static const ID4 PCP_HOST_TRACKER = "trkr";
static const ID4 PCP_HOST_CHANID = "cid";
static const ID4 PCP_HOST_VERSION = "ver";
static const ID4 PCP_HOST_FLAGS1 = "flg1";
static const ID4 PCP_HOST_OLDPOS = "oldp";
static const ID4 PCP_HOST_NEWPOS = "newp";

ID4是一个自定义类型,简单理解为char[4]类型
这些信息的发送和接收由AtomStream类来完成

这里PCP_HOST代表主信息,表明发送的信息类别是主机信息
以下的PCP_HOST_ID、PCP_HOST_IP均是PCP_HOST的子信息,这些信息类别都属于主机信息

发送时先发送主信息,通过writeParent来发送即atom.writeParent(PCP_HOST,12),其中第二个参数12表
示这个主信息以下将发送12个子信息,这个参数是为读取时用的。
然后依次发送子信息,通过writeInt、writeBytes等来发送整型和字符型的信息,例如atom.writeInt(PCP_HOST_IP,rhost[0].ip)
相当于键值型,PCP_HOST_IP代表键,rhost[0].ip代表值

void ChanHit::writeAtoms(AtomStream &atom,GnuID &chanID)
{
 bool addChan=chanID.isSet(); 

 int fl1 = 0;
 if (recv) fl1 |= PCP_HOST_FLAGS1_RECV;
 if (relay) fl1 |= PCP_HOST_FLAGS1_RELAY;
 if (direct) fl1 |= PCP_HOST_FLAGS1_DIRECT;
 if (cin) fl1 |= PCP_HOST_FLAGS1_CIN;
 if (tracker) fl1 |= PCP_HOST_FLAGS1_TRACKER;
 if (firewalled) fl1 |= PCP_HOST_FLAGS1_PUSH;


 atom.writeParent(PCP_HOST,12  + (addChan?1:0));
  if (addChan)
   atom.writeBytes(PCP_HOST_CHANID,chanID.id,16);
  atom.writeBytes(PCP_HOST_ID,sessionID.id,16);
  atom.writeInt(PCP_HOST_IP,rhost[0].ip);
  atom.writeShort(PCP_HOST_PORT,rhost[0].port);
  atom.writeInt(PCP_HOST_IP,rhost[1].ip);
  atom.writeShort(PCP_HOST_PORT,rhost[1].port);
  atom.writeInt(PCP_HOST_NUML,numListeners);
  atom.writeInt(PCP_HOST_NUMR,numRelays);
  atom.writeInt(PCP_HOST_UPTIME,upTime);
  atom.writeInt(PCP_HOST_VERSION,version);
  atom.writeChar(PCP_HOST_FLAGS1,fl1);
  atom.writeInt(PCP_HOST_OLDPOS,oldestPos);
  atom.writeInt(PCP_HOST_NEWPOS,newestPos);

}

PCP详解

我们知道,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。 /usr/src/…/include/linux/sched....
  • gjggj
  • gjggj
  • 2017年04月30日 16:16
  • 467

交换模块PCP原理图设计

  • 2017年08月08日 21:26
  • 38.47MB
  • 下载

rtmfp协议分析详解代码实现(二)

rtmfp封包与解包

PCP SVM-支持向量机

  • 2008年09月28日 11:58
  • 2.67MB
  • 下载

pcp人像采集系统--最强批量采集

  • 2012年07月23日 00:42
  • 9.51MB
  • 下载

《TCP/IP详解卷2:实现》笔记--域和协议

Net/3组把协议关联到一个域,并且用一个协议族常量来标识每个域。Net/3还通过所有的编址方法将协议分组。在一个域中 的每个协议使用同类地址,并且每种地址只被一个域使用。作为结果,一个域能通过它的协...
  • TODD911
  • TODD911
  • 2014年06月01日 15:51
  • 1581

PCP DIY的可以看看

  • 2014年02月20日 00:13
  • 552KB
  • 下载

TCPIP详解 卷1协议 卷2实现

  • 2017年12月10日 00:32
  • 17.83MB
  • 下载

《TCP/IP详解卷2:实现》笔记--IP:网际协议

本章介绍IP分组的结构和基本的IP处理过程,包括输入,转发和输出。
  • TODD911
  • TODD911
  • 2014年07月02日 22:13
  • 3114
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PCP协议实现详解
举报原因:
原因补充:

(最多只允许输入30个字)