集群服务器间的信息交换
2008-11-28 11:00:07 来源:WEB开发网步骤1: 脱离开原有进程并建立守护进程。程序如下:
pid = fork(); //建立进程
if ( pid< 0 ) return ;
if ( pid!=0 ) exit(0); //父进程退出
setsid (); //建立对话期
setpgrp(); //建立进程组,并成为进程组的首进程
chdir("/"); //更换工作目录为根目录
umask(0);
步骤2: 三通进程负责接收远程航空管制中心的数据。
//建立socket
Sid = socket (AF_INET, SOCK_DGRAM, 0);
if (sid < 0) {
perror(" n IN distribute.c create socket41432:");
exit(1);
}
//从/etc/services文件中获得服务名称,得到服务端口号。
sp = getservbyname ("head", "udp");
if (sp == NULL) {
printf(": head not found in /etc/servicesn");
exit(1);
}
addr.sin_port = sp->s_port;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
//打开地址重用机制
on = 1;
setsockopt(sid, SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on) );
//绑定此服务名
if ( bind ( sid, (struct sockaddr *)&addr, sizeof(struct sockaddr_in) )< 0 ) {
perror ( " n bind addr");
exit(0);
}
addrLen=sizeof(struct sockaddr_in);
//设定目的地址为组播地址
local_net.sin_family = AF_INET;
local_net.sin_addr.s_addr = inet_addr(multicast_ip);
sp = getservbyname ("mult_portt", "udp");
if (sp == NULL) {
printf(": hjff_port not found in /etc/servicesn");
exit(1);
}
local_net.sin_port = sp->s_port;
//循环等待接收和处理数据
for(;;) {
memset ( buff,0,2048 );
num = recvfrom ( sid, buff,2048,0, (struct sockaddr *)&srcAddr, &addrLen);
if ( num< 0 ) {
perror ( "n recvfrom ");
continue;
}
步骤3: 收到报文后,组织和封装数据并在局域网内利用组播来将数据转发给双服务器。
链接:ARP协议
ARP,全称Address Resolution Protocol,中文名为地址解析协议,它工作在数据链路层,在本层和硬件接口联系,同时对上层提供服务。
IP数据包常通过以太网发送,以太网设备并不识别32位IP地址,它们是以48位以太网地址传输以太网数据包。因此,必须把IP目的地址转换成以太网目的地址。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。ARP协议用于将网络中的IP地址解析为硬件地址(MAC地址),以保证通信的顺利进行。
更多精彩
赞助商链接