本篇介绍的是Linux下的网络编程,故有些接口是不适用于Windows的,但是具体概念和实现方法是大体一致的
本篇重在讲解原理,具体实现请戳这里->UDP套接字编程实现
介绍
- 网络编程套接字(socket)也是进程间通信的一种方式,但是不同于管道,消息队列,共享内存的是socket不仅可以实现本机内不同进程间的通信,也可以实现网络中两台不同主机间的进程通信。
socket相当于是一个文件描述符,我们将数据写入socket中,再发到目标主机,目标主机接收socket,再从socket中读取数据,至此便实现了网络中两台主机间的数据传输,即进程通信。
举个栗子:如果是两个人进行通信的话,首先要知道彼此的电话号码,而且要明确两个人谈论的事项,即使是闲聊也算生活事项的一种。网络中的两台主机进行通信也是如此,电话号码即彼此的ip地址,谈论的事项即彼此主机上确定的一个端口号
解释ip地址+端口号
网络编程套接字可以看做是ip地址+端口号,ip地址为了明确网络中唯一一台主机,而端口号确定了这台主机上的唯一一个进程,因为一个端口号只能被一个进程占用,而且只有网络进程才有端口号。
IP地址
IP协议有两个版本,IPv4和ipv6,现在普遍用的都是IPv4,IPv6是为了解决现有的IP地址可能不够的情况,但还没有普及开来。我们接下来使用的全是IPv4协议。
- IP地址是在IP协议中,用来标识网络中不同主机的地址;
- 对于IPv4来说,IP地址是一个4字节,32位的整数;
- 我们通常也使用“点分十进制”的字符串标识IP地址,例如192.168.0.1;用点分割的每一个数字表示一个字节,范围是0~255。
端口号
端口号是传输层协议的内容
- 端口号是一个2字节16位的整数;
- IP地址+端口号用来标识网络中某一台主机上的唯一一个进程;
- 一个端口号只能被一个进程占用,只有网络进程才有端口号。
网络字节序
大家可能刚看到这个觉得有点陌生,我来为大家解释一下。
我们都知道我们的计算机存储数据时是分大端和小端的,而且主机和主机之间的存储模式是不固定的,也就是没有统一的标准,即如果你是大端的模式&#x