gethostbyname 函数与getservbyname函数

 在socket网络编程中,由于要进行设备之间的连接,这两个是常用的函数,前一个是为了获得对方的IP地址,后一个是设置通信的端口号,这样就进行了连接

一. gethostbyname函数(为了获得对方的IP地址)

在linux环境下,如果连接网络 gethostbyname会连接DNS服务器(具体的服务器根据配置而定),DNS服务器会反回传入域名所对应的IP地址,如果是两台嵌入式设备连接(也是linux环境),那么此函数会在/etc/hosts/当前目录下寻找输入域名所对应的IP,所以,在两台设备进行通信之前,必须要在此文件下设置要连接的域名以及对应的IP地址

注意设置的时候ip地址与域名用tab(制表符)隔开

二. getservbyname函数(设置通信的端口号)

    在进行消息的传输时,除了要知道对方的IP地址,也要知道对方用的哪个端口进行接收数据,这个其实很容易理解,那么大个网络,你要发信息,首先要知道你要发给哪一台设备吧,这就需要知道对方的IP地址,但是这个设备有很多个端口来接受数据用的,所以必须要知道对方用的哪个端口来接受你发的数据,所以这时候就需要双方来达成一致了,这个也是要手动去设置的,在路径/etc/services/ 下可设置端口号

三. 实例(UDP) 

例子是设备A, 设备B,进行输入的传输,用的UDP协议,那么应该这么配置呢(两台设备都是linux操作系统)

①. 设备A,在/etc/hosts/下设置设备B的IP地址(这时候你必须要提前知道设备B的IP地址是多少,可以事先在设备B中找到,假设设备B 域名是: localb ,ip是 127.0.0.2)

     首先 vi /etc/hosts 文件,在其中添加 127.0.0.2  localb (为gethostbyname 函数做准备)

    其次   vi /etc/services 文件,在其中添加abservice    5000 /udp (为 getservbyname函数做准备)

②.设备B,与设备A是一样的,在/etc/hosts/下设置设备A的IP地址(这时候你必须要提前知道设备A的IP地址是多少,可以事先在设备A中找到,假设设备A 域名是: locala ,ip是 127.0.0.1)

     首先 vi /etc/hosts 文件,在其中添加 127.0.0.1  locala (为gethostbyname 函数做准备)

    其次   vi /etc/services 文件,在其中添加abservice    5000 /udp (为 getservbyname函数做准备)注意,端口号与设备A是一样的

    要注意的是: 设备B一定要绑定 自己IP地址与端口,这时候IP地址的话 htonl(INADDR_ANY),就可以了 ,因为INADDR_ANY会自动添加自己的 IP地址

   端口的话由于前面设置的是5000 ,调用getservbyname函数,他会寻找/etc/services 文件中的abservice   ,从而获得 端口5000,绑定之后,以后传来的数据都是通过

   端口5000来接受

  设备A,发送数据,发送目的IP地址(设备b),调用gethostbyname函数,他会寻找/etc/hosts文件中的localb,从而找到IP地址127.0.0.2,端口通过getservbyname找到5000(这里是指当数据传入设备B中的指定端口,也就是设备A在发送数据的时候是可以以任意 端口进行发送的,除非端口A绑定一个端口),同理,设备B是通过5000这个端口接受数据的,也就是说他再发送数据的时候是通过5000这个端口发送出去的,因为已经绑定了5000这个端口

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值