目录
端口号
2字节16位整数
端口号用来标识进程。
ip + 端口号(port) == 标识 互联网中某一台主机中的一个进程
网络通信的本质 :进程间通信!!!
-
大小端
-
一个数据的低权值位存储在内存的低地址处---小端 --- 记忆:小小小
-
一个数据的低权值位存储在内存的高地址处---大端
-
socket系统调用接口
1.socket:创建套接字 --- 返回一个文件fd
第一个参数:域---本地o网络(AF_INET)
第二个参数:套接字类型 可以设置为xxx_DGARM(UDP协议)
第三个参数:设置为0
Struct sockaddr结构体注意事项
struct sockaddr_in结构体中,要配置域---sin_family ,以及传入网络中的本机端口号sin_port---类型是 uint16_t, sin_addr中的s_addr成员:绑定ip地址
将自定义的本地端口号port转化成网络序列的函数--->htons(uint16_t)
网络序列转成主机序列的函数 ntohs函数(传入网络序列的port)
注意!!sin_addr 接收的是网络序列类型的IP地址(4字节) ,可以使用系统调用inet_addr将字符串风格的ip地址转换为网络序列(该函数内部会先将ip转换为4字节int,然后转换为网络序列类型)
bind函数
将一个套接字(socket)与特定的IP地址和端口号绑定
客户端不需要bind
sockaddr.sin.addr_s.addr = INETADDR---表示接受所有的ip
recvfrom函数
用来读取/接收数据
参数:flags:
设置为0为阻塞读取
sendto函数:
作用:向客户端发送数据
参数说明
struct sockaddr:接收“谁”发来的ip和port
flag可以设置为0:阻塞等待
安全的地址转化函数
4字节ip地址转字符串ip:
af是AF_INET
字符串转网络序列:
细节:
在云服务器上,server 要bind的ip = 0!!,云服务器不能绑定自己的公网IP,客户端不需要显示bind ip和port ---记得要填充结构体时,要转换成网络序列再传进去!!
服务器加业务时,一定要强解耦!!IO与业务独立开!!
网络命令
netstat -upa:查询系统中启动udp服务的进程