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引用。下图为改正

相关推荐
且从容.2 小时前
ubuntu安装flink
linux·ubuntu·flink
爱和冰阔落3 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨3 小时前
WSL2的安装与使用
linux·wsl
微小的鱼3 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng4 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
严肃小白兔4 小时前
Cloudflare 更新 API Token 管理:从最小权限到自动化凭据安全
网络·安全·自动化
Android系统攻城狮5 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
Linux-lucky16 小时前
45-Linux学习之旅之防火墙与WEB加固
linux·前端·网络·学习·ubuntu
禁默16 小时前
启元 Q1 二次开发实践:Ubuntu 部署与仿真验证,从 PrimeConsole 到 ROS 2 Humble + RViz
linux·运维·ubuntu
skywalk816317 小时前
把 去也网站 从 Ubuntu 搬到 FreeBSD:一次 Service Jail + nginx 的部署实录
linux·运维·nginx·ubuntu·freebsd