网络5.15
作者:互联网
Sip+sport+dip+dport+protocol—五元组-标识一条通信网络中的每条数据都会包含有完整的五元组信息
Socket套接字编程 :网络通信程序的编写(接口+流程)
Udp协议通信程序的编写/tcp协议通信程序的编写
Udp协议与tcp协议的区别初识
Udp协议:用户数据报协议
特性:无连接 不可靠 面向数据报
应用场景:实时性要求大于安全性要求的场景—视频传输
Tcp协议:传输控制协议
特性:面向连接 可靠 面向字节流
应用场景:安全性要求大于实时性要求的场景—文件传输
在网络通信程序中,通信两端被分为:客户端、服务器端
客户端:提供给客户的通信端,通常是编写通信程序中主动发起请求的一端
服务端:通常指被动接受请求,提供服务的通信端
客户端是主动发送请求的一端,也就意味着客户端必须提前知道服务端的地址信息(ip+port)
服务端的地址信息通常是固定的,并且是提前提供给客户端的
Udp通信程序的编写(套接字的接口)
服务端
- 创建套接字—在内核中创建一个socket结构体
- 为套接字绑定地址信息 在创建胎儿子创建的socket结构体中加入ip+port信息
1) 告诉操作系统主机收到的哪些数据应该交给当前的这个socket
2) 确定发送数据的源端地址信息
3.接收数据
4.发送数据
将要发送的数据放到socket发送缓冲区中,内核选择合适时候封装发送
5.关闭套接字
客户端 - 创建套接字
- 为套接字绑定地址(大多数情况下会忽略)在发送数据时,若socket没有绑定地址,则系统会选择合适的地址进行绑定
- 发送数据
- 接收数据
5.关闭套接字
当前进程从指定的socket接受缓冲区中取出数据
Struct socket sip+sport 192.168.2.2:8000
接口认识 - 创建套接字
int socket(int domain, int type, int protocol);
domain:地址域类型—AF_INET-IPV4通信,使用ipv4地址结构
type:套接字类型;SOCK_STREAM/SOCK_DGRAM
udp通信必须使用SOCK_DGRAM tcp通信必须使用SOCK_STREAM
protocol:本次通信协议IPPROTO_TCP-6/IPPROTO_UDP-17;0
返回值:返回一个文件描述符-操作句柄 成功返回0,失败返回-1 - 为套接字绑定地址信息
int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
sockfd:创建套接字返回的操作句柄
addr:当前绑定的地址信息
socklen_t:地址信息长度
返回值:成功返回0,失败返回-1 - 接收数据
ssize_t recvfrom(int sockfd,void *buf,int len,int flag,struct sockaddr * srcaddr,socklen_t * addrlen)
sockfd:操作句柄 buf:空间地址 用于存放接收的数据
len:要接受的数据长度,flag:选项标志-默认0-表示阻塞接收
sarcddr:本条数据的源端地址信息
addrlen:输入输出参数-指定要接受多长的地址结构,并且返回实际接收的地址长度
返回值:返回实际接收到的数据长度;失败错误返回-1 - 发送数据:
ssize_t sendto(int sockfd,void *data,int len,int flag,struct sockdaddr * peeraddr,socklen_t addrlen)
sockfd:操作句柄 data:要发送的数据的空间首地址
len:要发送的数据长度,flag :默认0-阻塞发送
peeraddr:对端地址信息 addrlen:地址结构长度
返回值:成功返回实际发送的数据长度,失败返回-1 - 关闭套接字
Int close(int fd);
字节序转换接口
uint32_t htonl(uint32_t hostlong);32位数据主机到网络字节序转换
uint16_t htons(uint16_t hostshort); 16位数据主机到网络字节序转换
uint32_t ntohl(uint32_t netlong); 32位网络到数据主机字节序转换
uint16_t ntohs(uint16_t netshort);16位网络到数据主机字节序转换
port转换使用s,ip转换用l,不能混用
将字符串淀粉十进制ip地址转换为整形网络字节序IP地址
“192.168.2.2”->0xc0a80202
in_addr_t inet_addr(const char *cp);
将网络字节序IP地址转换为字符串点分十进制IP地址
char *inet_ntoa(struct in_addr in);in.s_addr=0xc0a80202
const char * inet_ntop(int af,viod
ssize_t --有符号int
size_t –无符号int
标签:socket,int,网络,地址,5.15,接字,数据,字节 来源: https://blog.csdn.net/qq_43609421/article/details/116862619