socket编程—UDP套接字
- 一、UDP套接字
- socket函数的参数
- socket()函数返回值
- 1、服务端
- 创建套接字
- 绑定端口
- 提供服务
- 2、客户端
- 创建套接字
一、UDP套接字
IP是标识互联网当中的唯一一台主机
端口号是标识一台主机内的唯一一个进程
两者相加就是标识互联网当中唯一一个进程
整个互联网可以看作一个大的OS,所有在网络上的行为,基本都是在一个大的OS内,进行进程间通信!
所以后续我们IP+端口号=socket
要进行通信,本质:
1、先找到目标主机
2、在找到该主机上的服务(进程)
互联网世界,是一个进程间通信的世界
进程具有独立性,进程间通信的前提工作:先让不同的进程,看到同一份资源。这里的同一份资源是网络!
socket函数的参数
套接字类型:用struct sockaddr *类型表示, 在使用的时候需要强制转化成sockaddr_in; 这样的好处是程序的通用性, 可以接收IPv4, IPv6, 以及UNIX Domain Socket各种类型的sockaddr结构体指针做为参数。
struct sockaddr_in结构体
socket()函数返回值
返回一个文件描述符
1、服务端
创建套接字
作为一个服务器,要不要让客户知道,对应的服务器的地址(ip+port)?必须知道!
服务器的socket信息(ip+port),必须得让客户知道!
一般的服务器port,必须是众所周知(不仅是被人,也可以被各种软件等知道的)的,并且轻易不改变!
绑定端口
bind()函数
提供服务
recvfrom()函数接收对端发来的数据
返回值:
sendto()返回给对端数据
2、客户端
创建套接字
//客户端需要显示的bind嘛?不需要
//a、首先,客户端必须也要有ip和port
//b、但是,客户端不需要显示的bind!一旦显示bind,就必须明确,client要和哪一个port关联
//client指明的端口号,在client端一定有嘛?有可能被占用,被占用导致client无法使用
//server要的是port必须明确,而且不变,但是client只要有就行!一般是由OS自动给你bind()
//就是client正常发送数据的时候,OS会自动给你bind,采用的是随机端口的方式!
注:一些函数的解析为网上截图,如有侵权请联系删除;