Linux网络:UDP编程踩坑日记

1、recfrom缓冲区越界,这个问题很典型,先了解一下这个函数。

#include <sys/socket.h>

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);

当创建一个char buffer1024,此时有一个缓冲区,但是我在写udp编程的时候出现了一个错误就是这么写的。int n=recvfrom(sockfd,buffer,sizeof(buffer),0,(struct sockaddr*)from,&len);

buffern='\0',这么写看似正确对吧,但是有一个错误,就是,n就是接受到的数据大小,我们设置的就是1024,当超过这个大小的时候对吧此时buffern,就已经超过了这个buffer的范围,此时就会越界,所以必须这么写int n=recvfrom(sockfd,buffer,sizeof(buffer)-1,0,(struct sockaddr*)from,&len);

2、先写一段代码,char buffer1024; (string)buffer,这个是一个c风格强转,内存很多都是不同的所以此时就会导致报错,所以需要这么些string(buffer);这样就会去调用正确的构造函数,此时就不会有问题了。

3、char buffer1024;当使用cin>>buffer此时如果用户输入的过多就会导致栈溢出。此时推荐更安全的做法,char buf1024; getline(buf,sizeof(buf));

4、find找不到的话返回的是string npos;

5、char,string如果sendto时大小用strlen,因为strlen返回的是使用的大小,比如说hello world就是11不含'\0',如果用sizeof(buffer),此时就会把1024全部给sendto,光传一堆垃圾值,但是strlen不是无脑使用,必须还有'\0',所以上边哪里都是推荐带'\0'的在自己弄的char数组里边。

6、

这一个坑也是比较隐蔽的,可能是有一段时间没有写C++的缘故,这个问题也需要注意右值不能和非const引用。下图为改正

相关推荐
盐焗鹌鹑蛋1 小时前
【Linux】线程库与封装
linux
lwx9148521 小时前
Deepin操作系统
linux·服务器·网络
先知后行。1 小时前
进程间通信(IPC)
linux·运维·服务器
跨境数据猎手2 小时前
机房、住宅、原生IP区别在哪,三类代理的说明
网络·网络协议·tcp/ip
weixin_571667412 小时前
Windows 通过 SSH 反向隧道向 Ubuntu 转发代理
linux·运维·windows·代理
POMAGTOR2 小时前
硬件接口选型|磁吸式连接器原理与应用,不止磁吸充电
网络·嵌入式硬件·电脑
乔旭伟2 小时前
CentOS 停更迁移实战:vault 源配置、目标选型与迁移工程清单
linux·运维·centos
遇印记2 小时前
应用层,网络管理
运维·网络·windows·学习·安全
鬼手点金3 小时前
ReAct 循环
linux·服务器·前端·javascript·react.js·前端框架