rip c语言,rip的C语言实现.doc

rip的C语言实现

rip的C语言实现

//运转环境visual studio 2005 C++代

#include "stdafx.h" //手动添加头文件C:\Program Files\Microsoft Visual Studio\VC98\ATL\SRC

#include

#include

#include

#include

#include

using namespace std;

const int MAX=15;

typedef struct ArcCell//弧结点

{

int adj;

}ArcCell,Am[MAX][MAX];

struct TNode//路由表

{

string destination;

int distance;

string nextjump;

};

struct VNode//路由结点

{

string r;//极点名

vector t;

};

struct Graph{//图

VNode vex[MAX];

Am arcs;

int vexnum,arcnum;

};

//确定s正在图中的地位

int LocateVex(Graph G,string s)

{

int i;

for(i=0;i

if(s==G.vex[i].r)

break;

return i;

}

//建立图

bool Create(Graph &G)

{

int i,j,k;

TNode temp;

string v1,v2;

cout<

cin>>G.vexnum>>G.arcnum;

cout<

for(i=0;i

{

cout<

cin>>G.vex[i].r;

cout<

cin>>temp.destination>>temp.distance>>temp.nextjump;

while(1)

{

if(temp.distance>16)temp.distance=16;

G.vex[i].t.push_back(temp);//结构路由表

cin>>temp.destination>>temp.distance>>temp.nextjump;

if(temp.destination=="0"&&temp.distance==0&&temp.nextjump=="0")

break;

}

}

for(i=0;i

for(j=0;j

G.arcs[i][j].adj=10000;

for(k=0;k

{

cout<

cin>>v1>>v2;

i=LocateVex(G,v1);

j=LocateVex(G,v2);

G.arcs[i][j].adj=1;

G.arcs[j][i].adj=1;

}

return true;

}

void print(Graph G)

{

int i,j;

for(i=0;i

{

cout<

cout<

for(j=0;j

cout<

cout<

}

}

bool Exchange(Graph &G)

{

int i,j,k,t,count;

TNode temp;

for(i=0;i

for(j=0;j

{

if(G.arcs[i][j].adj==1)

{

for(k=0;k

{

temp.destination=G.vex[i].t[k].destination;

temp.distance=G.vex[i].t[k].distance+1;

if(temp.distance>16)temp.d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用C写的rip协议 这是其中的广播request程序片段: void RouteInit() { int i,optval=0,length,error; routeNum = 0; // init local socket address and ip address GetLocalIP(); // init route table items for(i = 0; i < MAX_NUM; i++) { SetRouteEntry(&routeTable[i].routeInfo,"0.0.0.0",0,0); routeTable[i].isvalid = 0; routeTable[i].timer = 0; routeTable[i].statue = 0; inet_aton("0,0,0,0",&routeTable[i].sourceIPAddr); } // init request packet SetRoutePacket(&reqPacket,REQUEST); SetRouteEntry(&reqPacket.routeEntry[0],"0.0.0.0",0,16); // init response packet SetRoutePacket(&resPacket,RESPONSE); recvSockAddr.sin_family = AF_INET; recvSockAddr.sin_port = htons(PORT); recvSockAddr.sin_addr.s_addr = htonl(INADDR_ANY); sendSockAddr.sin_family = AF_INET; sendSockAddr.sin_port = htons(PORT); // inet_aton("240.255.255.255",&sendSockAddr.sin_addr); sendSockAddr.sin_addr.s_addr = htonl(INADDR_ANY); EntryInit(); sock = socket(AF_INET,SOCK_DGRAM,0); if(sock<0) { printf("cannot create a socket!\n"); exit(1); } if(setsockopt(sock,SOL_SOCKET,SO_BROADCAST,&optval,sizeof(int)) != 0) { printf("cannot broadcast!\n"); close(sock); exit(1); } if(bind(sock,(struct sockaddr*)&recvSockAddr,sizeof(recvSockAddr))<0) { printf("cannot bind to port\n"); close(sock); exit(1); } length=sizeof recvSockAddr; getsockname(sock,(struct sockaddr*)&recvSockAddr,&length); printf("Port %d is opened. Listen for packet...\n",ntohs(recvSockAddr.sin_port)); FD_ZERO(&fdSet); FD_SET(sock,&fdSet); error = sendto(sock,&reqPacket,4+sizeof(struct ROUTE_ENTRY),0,(struct sockaddr*)(&sendSockAddr),sizeof(struct sockaddr)); if(error<0) { PrintEntry(&reqPacket.routeEntry[0]); printf("broadcast request packet failed! %d,%d,%d\n",error,sock,fdSet); } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值