编辑: 阿拉蕾 2019-07-06

Man you,*pbuf,*pman;

pbuf=(Man*)&buf[0];

you=*pbuf;

if(strcmp(me.IP,you.IP)!=0) //如果不是我自己发的报文 {bool if_new=1;

for(pman=me.next;

pman!=NULL;

pman=pman->next) {if(strcmp(pman->IP,you.IP)==0) //如果在链表中找到该IP {you.next=pman->next;

*pman=you;

if_new=0;

break;

收到的you的next为对方电脑里链表的next 为防止错误改写,先保护我的电脑里链表的next if(if_new) //如果在链表中找不到该IP,插入新加入玩家的记录 {pman=new Man;

pman=you;

pman->next=me.next;

me.next=pman;

在OnCreate中 初始化socket对象 sock.Create(5560,SOCK_DGRAM,NULL);

//初始化 socket对象 // 端口号,数据报方式(用UDP协议)//以下为获取本机IP地址的代码 char HostName[256];

LPSTR IpAddr;

struct in_addr inAddr;

gethostname(HostName,sizeof(HostName));

//获取主机名struct hostent FAR* lpHostEnt=gethostbyname(HostName);

IpAddr=lpHostEnt->h_addr_list[0];

memmove(&inAddr,IpAddr,4)获取主机名对应的IP地址,转换为标准格式 strcpy(me.IP,inet_ntoa(inAddr)记录本机的IP地址 在OnTimer 中定时将本机的人物信息发给其他计算机 CString b_ip;

b_ip="10.2.35.255";

//设置子网广播地址 //注:如果只针对一台计算机发则只需要设置对方地址,此时IP报文可以越过路由器sock.SendTo(&me,sizeof(Man),5560,b_ip,0);

//发送缓冲区,发送字节数,对方端口号,对方IP

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题