不同的程序进行网络通信时,是通过IP地址和套接字来访问一个主机的。
11.1 IP地址:
IP地址---网卡地址----在程序中是通过IP地址来访问一台计算机的。(比如一个手机的号码)
IP地址:32位长度的二进制数值,4个字节---点分10进制
ubuntu查看本机IP: ifconfig -a。
1.1.2 端口
所谓端口,是指计算机中为了标识在计算机中访问网络的不同程序而设的编号。
程序在访问网络或接受访问时,会用这个标识符表示这一网络数据属于这个程序。
这里的端口并非网卡接线的端口,而是不同程序的逻辑编号,并不是实际存在的。
端口号是一个16位的无符号整数----10进制取值范围0~65536.
WWW服务使用的是80号端口,FTP服务使用的是21号端口。低于256的端口是系统保留端口。
不在这个范围内的是自由端口号,在编程时可以调用这些端口号。
11.3 域名
百度网站---119.75.217.109---------www.baidu.com。
11.1.4 TCP与UDP
TCP和UDP是两种不同的网络传输方式。
两个不同计算机中的程序,使用IP地址和端口,要使用一种约定的方法进行数据传输。
TCP:面向连接的网络传输方式,理解为打电话。可靠、缺点是传输过程复杂,需要占用较多的网络资源。
UDP:不面向连接的传输方式。理解为邮寄信件。不可靠,但是传输效率很高。(比如网络视频监控,要求实时性好,用UDP)
11.2 套接字:在网络中用来描述计算机中不同程序与其他计算机程序的套接字。
11.2.1 什么是套接字
为了区分不同的应用程序的进程和连接,需要使用应用程序与TCP/IP协议交互的套接字(Socket)的接口。
三个参数:1.通信的目的地的IP地址,使用的传输层协议(TCP或UDP)和使用的端口号。
这三个参数可以构成一个套接字。
这个套接字相当于一个接口,可以进行不同计算机程序的信息传输。
11.2.2 套接字相关的数据类型
sockaddr , sockaddr_in-------------------系统中定义的结构体,用于保存套接字的信息。
struct sockaddr
{
unsigned short int sa_family;
char sa_data[14];
}
short int sa_family---指定通信的地址类型。
11.2.3 套接字类型
1.流套接字(SOCK_STREAM)
2.数据报套接字(Raw Sockets)
3.原始套接字(SOCK_RAW)
11.3 域名与IP地址
C程序中的IP地址和域名的转换问题。
11.3.1 用域名取得主机的IP地址
函数:gethostbyname。
11.3.2 用IP地址返回域名
函数:gethostbyaddr。
11.4 网络协议:不同的计算机、不同的操作系统在进行网络通信时的统一约定。
11.4.1 由协议名取得协议数据:
函数:getprotobyname。
需要包含头文件:#include <netdb.h>
11.4.2 由协议编号取得协议信息
函数:getprotobynumber。
11.4.3 取得系统支持的所有协议。
函数:getprotoent。
系统中支持的协议的类型是记录在/etc/protocols文件中的。
11.5 网络服务:网络上的计算机通过运行程序为其他的计算机提供信息或运算的功能。【比如打开一个网络是访问了网站服务器上的服务】
11.5.1 取得系统支持的网络服务
函数servent。
系统文件列表中支持的服务:vim /etc/services。
11.5.2 用名称取得系统所支持的服务
11.5.3 由端口取得服务名称
11.6 网络IP地址的转换
网络IP地址在网络传输与计算机内部的字符存储的方式是不同的,需要用相关的函数将网络IP地址进行转换。
11.6.3 主机字符顺序与网络字符顺序的转换
计算机中的字符与网络中的字符的存储顺序是不同的。
11.7 错误处理
‘