|
马上注册登陆,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?用户注册
x
是一种不可靠的通信,但是有些时候还是会有使用。今天分享一个示例:主体逻辑,一个端口广播地址,接收到地址数据后,其他端口基于这个进行绑定,比较后通信,这样可以保证我们后续继续增加端口交互时候不需要关注地址绑定的问题。前言是一种不可靠的通信,但是有些时候还是会有使用。今天分享一个示例:主体逻辑,一个端口广播地址,接收到地址数据后,其他端口基于这个进行绑定,比较后通信,这样可以保证我们后续继续增加端口交互时候不需要关注地址绑定的问题。ip地址归属地查询的最新消息可以到我们平台网站了解一下,也可以咨询客服人员进行详细的解答!
主要原理介绍低通信频率端口进行服务端IP信息广播,接收端是不固定IP监听,监听主机任意IP地址的特定端口接收到广播通道的地址后,与特定IP、建立或者双向高频率通信。下图是基于UDP的S函数调用过程:
只有接收的时候需要和端口
监听所有特定端口代码:
#PORT6000(_,(_));__=AF_INET;___=(INADDR_ANY);__=();=(,(*),());绑定的为INADDR_ANY的说明:
INADDR_ANY监听0000地址只绑定端口让路由表决定传到哪个
其中INADDR_ANY就是指定地址为0000的地址,这个地址事上表示不确定地址,或“所有地址”、“任意地址”。如果指定地址为通配地址(INADDR_ANY),那么内核将等到套接字已连接(TCP)或已在套接字上发出数据报时才选择一个本地IP地址。一般情况下,如果你要建立络服务器,则你要通知服务器操作系统:请在某地址上的某端口上进行侦听,并且把侦听到的数据包发送给我。这个过程,你是通过()系统调用完成的。——也就是说,你的程序要绑定服务器的某地址,或者说:把服务器的某地址上的某端口占为已用。服务器操作系统可以给你这个指定的地址,也可以不给你。
如果你的服务器有多个卡,而你的服务(不管是在端口上侦听,还是在端口上侦听),出于某种原因:可能是你的服务器操作系统可能随时增减IP地址,也有可能是为了省去确定服务器上有什么络端口(卡)的麻烦——可以要在调用()的时候,告诉操作系统:“我需要在端口上侦听,所以发送到服务器的这个端口,不管是哪个卡哪个IP地址接收到的数据,都是我处理的。”这时候,服务器则在0000这个地址上进行侦听。论连接哪个都可以连上的,只要是往这个端口发送的所有都能连上。
示例代码:_在端口9001进行地址的广播以及读取终端数据广播到7000端口
############IP"127001"##_-_-=-1;接收线程函数*(*_){=0;_[3]={0};_0={0};0_=(0);从对端和端口号中接收消息,指定0用于存放消息(1){(_,(_));=(,_,(_),0,(*)0,0_);(-1==){(,"%,%:%",__LINE__,"",());(-1);}(0){("\=%",_);打印对方的消息和端口号("%,%\",_(0_),(0_));}}}*_(*_){=0;[]="IP";_0={0};0_=AF_INET;设置协议族0_=(DATA_PORT);设置端口号0__=(INADDR_ANY);设置地址发送消息(1){=(,(*),(),0,(*)0,(0));(1);(-1==){(,"%,%:%",__LINE__,"",());(-1);}}}(){=-1;创建协议族,指定通信方式为链接不可靠的通信=(AF_INET,SOCK_DGRAM,0);(-1==){(,"%,%:%",__LINE__,"",());(-1);}进行端口号和的绑定_;_=AF_INET;设置协议族_=(PORT);设置端口号__=_(IP);设置地址=(,(*),());(-1==){(,"%,%:%",__LINE__,"",());(-1);}创建线程函数,用于处理数据接收_,__;=_(,NULL,,NULL);(-1==){(,"%,%:%",__LINE__,"_",());(-1);}_(,NULL);=_(__,NULL,_,NULL);(-1==){(,"%,%:%",__LINE__,"_",());(-1);}_0;0_=AF_INET;设置协议族0_=(7000);设置端口号0__=_(IP);设置地址_[3]={0};发送消息(1){(_,(_));(":");("%",_);发送消息时需要绑定对方的和端口号=(,(*)_,(_),0,(*)0,(0));(-1==){(,"%,%:%",__LINE__,"",());(-1);}}0;}_进行端口9001的数据的捕获,当接收到数据后,绑定广播的地址进行数据的收发,这里用的是接收大家也可以试试交互。
############IP"127001"##32___;_-_-=-1,_=-1;32__=-1;*(*_){=0;_[3]={0};_0={0};0_=(0);(1){(":");(_,(_));=(,_,(_),0,(*)0,0_);(-1==){(,"%,%:%",__LINE__,"",());(-1);}(0){("\=%",_);("%,%\",_(0_),(0_));}}}*_(*_){=0;_[10]={0};_0={0};0_=(0);(1){(_,(_));=(_,_,(_),0,(*)0,0_);(-1==){(,"%,%:%",__LINE__,"",());(-1);}(0){("\=%",_);("%,%\",_(0_),(0_));_=0__;[20]={0};_(AF_INET,_,,());("_=%",);("_=%",_(_));;}}}(){=-1;_=(AF_INET,SOCK_DGRAM,0);(-1==_){(,"%,%:%",__LINE__,"",());(-1);}_;_=AF_INET;设置协议族_=(DATA_PORT);设置端口号__=_(IP);设置地址=(_,(*),());(-1==){(,"%,%:%",__LINE__,"",());(-1);}__;=_(_,NULL,_,NULL);(-1==){(,"%,%:%",__LINE__,"_",());(-1);}_(_,NULL);=(AF_INET,SOCK_DGRAM,0);(-1==){(,"%,%:%",__LINE__,"",());(-1);}_1;1_=AF_INET;设置协议族1_=(PORT);设置端口号1__=_;设置地址[20]={0};_(AF_INET,_,,());("=%",);=(,(*)1,(1));(-1==){(,"%,%:%",__LINE__,"",());(-1);}_;=_(,NULL,,NULL);(-1==){(,"%,%:%",__LINE__,"_",());(-1);}_(,NULL);_0;0_=AF_INET;设置协议族0_=(6000);设置端口号0__=_(IP);设置地址_[3]={0};(1){(_,(_));(":");("%",_);=(,(*)_,(_),0,(*)0,(0));(-1==){(,"%,%:%",__LINE__,"",());(-1);}}0;}一个终端捕获数据,-5000-8000--XX-,另外两个终端进行数据交互
结语这就是我自己的一些设计思路的分享。如果大家有更好的想法和需求,也欢迎大家加我好友交流分享哈。
作者:良知犹存,白天努力工作,晚上原创号主。内容除了技术还有些人生感悟,一个认真输出内容的职场老司机,也是一个技术之外丰富生活的人,摄影、音乐篮球。 |
|