Linux学习-网络编程2

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

cs 复制代码
udp 客户端    //主动
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
相关推荐
XIAOHEZIcode4 小时前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行
唐青枫6 小时前
别再只会用 cron:Linux systemd Timer 定时任务实战详解
linux
AlfredZhao2 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
戴为沐3 天前
Linux内存扩容指南
linux
zylyehuo4 天前
Linux 彻底且安全地删除文件
linux
用户805533698034 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297914 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
Web3探索者6 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
zylyehuo6 天前
Linux系统中网线与USB网络共享冲突
linux
Sokach10157 天前
Linux Shell 脚本从零到能用:一个新手的一天学习总结
linux