1.tcp可能出现粘包
解决:要让消息之间有边界
1.结束标志 \r\n
2.固定长度
3.协议结构体
2.recv和send
recv
cs原型:ssize_t recv(int sockfd, void *buf, size_t len, int flags); 功能:从sockfd接收信息 参数: sockfd:要操作的socket buf:存放数据的空间 len:buf的大小 flags:制定读取信息的操作标志 MSG_DONTWAIT 返回值: 成功返回读取到的字节数 失败返回-1
send
cs原型:ssize_t send(int sockfd, const void *buf, size_t len, int flags); 功能:发送信息到socket里面 参数: sockfd:要操作的socket buf:存放数据的空间 len:buf的大小 flags:操作标志 MSG_DONTWAIT 返回值: 成功返回读取到的字节数 失败返回-1
udp编程
1.模型
c/s
csudp 客户端 //主动 socket sendto ... recvfrom close udp 服务器端 //被动 socket bind recvfrom ... printf sendto close
2.函数
sendto
cs原型:ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); 功能:向socket中发送信息 参数: sockfd:要操作的socket buf:存放数据的空间 len:buf的大小 flags:操作标志 MSG_DONTWAIT dest_addr:要发送到的目的地址 addrlen:地址大小 返回值: 成功返回发送的字节数 失败返回-1
recvfrom
cs原型:ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); 功能:从socket中接收信息 参数: sockfd:要操作的socket buf:存放数据的空间 len:buf的大小 flags:制定读取信息的操作标志 MSG_DONTWAIT src_addr:保存客户端的地址信息 addrlen:值结果参数 返回值: 成功返回读到的字节数 失败返回-1