学习套接字之前你需要知道的
套接字编程,通俗的来说:主要讲解的是如何编写一个网络通信程序
1.网络通信的数据汇总都会包含一个完整的为五元组(sip[源端ip地址]、sport[源端端口]、dip[目的端IP地址]dport、protocol[协议]);五元组完成的描述了数据从哪里来到哪里去,用的是什么数据格式。
2.网络通信,通常讨论的是俩个主机之间的通信:客户端&服务端
客户端网络通信程序:通常指的是用户使用的一端
服务端网络通信程序:通常指的是网络编写服务端程序的工作
3.同时我们需要了解:客户端永远都是首先发起服务请求的一端,因为服务器是不知道客户端的地址的,现在用的是动态地址分配,每次上网地址可能发生改变,开发客户端程序都写入了服务端的地址和端口,因此客户端是知道服务端的地址,还有一种原因,只有客户发送了请求,服务端才能提供对应的服务。
套接字编程
套接字
套接字:socket(插座、接口)的翻译,通常表示的是系统提供给程序员实现网络通信的一套接口,为啥封装这些接口呢?因为我们知道,网络通信中有很多的协议, 所以在这套接口中就提供了足够充足的选择。我们通常使用的主要是两个协议的通信程序编写:传输层的TCP和UDP协议。
TCP协议和UDP协议区别
UDP协议的编写
UDP通信两端流程
服务端:
创建套接字–建立当前进程与网卡之间的关联,在内核中,创建了一个socket结构体
为套接字绑定地址信息,给创建的socket结构体,内部描述源端IP地址和端口
(1) 告诉系统收到的数据中凡是地址和端口是我绑定就交给我处理
(2)发送数据的时候,源端地址就是绑定的地址信息绑定的地址,必须是当前设备所拥有的地址
接收数据:从内核的socket结构体接收缓冲区中取出数据
发送数据:将数据放到内核socket结构体的发送缓冲区中,什么时候实际发送出去,由系统决定
不通信了,就关闭套接字,释放资源
客户端:
创建套接字
为套接字绑定地址信息(不推荐)
一个端口只能被一个网络进程占用。因此一旦客户端程序中绑定的固定的地址这个客户端就只能运行一个了,并且还有端口
冲突的风险。
发送数据
如果绑定了地址信息,则源端地址就是绑定的,如果没有绑定地址信息,则系统会选择一个合适的地址和端口进行自动绑定。
接收数据
不需要考虑,只需要从接收缓冲区取出数据即可
不通信了则关闭套接字释放资源。