在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这个端口