概述
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协议实现详解的全部内容,希望文章能够帮你解决PCP协议实现详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复