1.socket套接字
通信对象的抽象
2.函数接口
1.socket
int socket(int domain,int type,int protocol);
功能:创建一个用来网络通信的终端节点
参数:
domain:协议族 AF_INET(IPv4)
type:套接字类型
SOCK_STREAM: 流式套接字 TCP
SOCK_DGRAM: 数据报套接字 UDP
SOCK_RAW: 原始套接字
protocol:
默认传0
返回值:
成功返回创建的文件描述符
失败返回-1
2.sendto
ssize_t sendto(int sockfd,const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
功能:发送数据信息
参数:
sockfd:套接字文件描述符
buf:发送数据空间首地址
len:发送的字节数
flags:发送属性(默认为0)
dest_addr:目的地址信息存放空间首地址
addrlen:目的地址的长度
返回值:
成功返回发送字节数
失败返回-1
3.inet_addr
in_addr_t inet_addr(const char *cp);
功能:将字符串IP地址转换为内存IP地址类型
4.htons
uinnt16_t htons(uint 16_t hostshort);
功能:将本地字节序转换成网络字节序
5.bind
int bind(int sockfd,const struct sovkaddr *addr,socjlen_t addrlen);
功能:将一个套接字与IP和端口号绑定
参数:
sockfd:套接字文件描述符
addr:绑定的IP地址和端口号信息
addrlen:地址的大小
返回值:
成功返回0
失败返回-1
6.recvfrom
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
功能:接受字符串
参数:
sockfd:套接字文件描述符
buf:存放数据空间首地址
len:存放数据最大字节数
flags:属性默认为0
src_addr:存放发送方地址信息空间首地址
addrlen:接受发送方的地址信息长度
返回值:
成功返回实际接受字节数
失败返回-1
3.UDP通信流程
1.发送方:
socket
sendto
close
2.接收方
socket
bind
recvfrom
close
4.UDP包头:
8个字节
1.源端口(2个字节)
2.目的端口(2个字节)
3.长度(2个字节)
4.校验码(2个字节)
5.MTU:
最大传输单元
UDP MTU 最大为:1500