less,but diff

充实


由知乎“内心的充实从何而来”一些点。 揭秘了人的充实感机制。 情绪:追求内心的平和,需要去除负能量的情绪,但是这清除的操作于人来说基本无法完成。所以,换个思路来说就是用美好的事物去冲击负能量。 焦虑不外乎两件事:担心未来,懊悔过去。 1.充实的本质 思考一个问题:问你2019年,你印象最深刻的一段经历是什么,假如你19年出去旅游过,那么,你可能会回答是“旅行的经历” 为什么呢,因为旅行是去一个全新的地方,获得全新的体验,会带给你大量的新信息,从而把你从庸常的平凡的生活中解放出来。 进一步思考:枯竭的内在,乏味的人生,抑郁的情绪,这些表象的原因是什么呢? 其实就是信息的匮乏。 这也能解释为什么有些人很爱看书,看书能跟随作者的视角去获得全新的体验,而这也说明为什么现在抖音短视频那么火,短暂的时间获取到全新的信息。 明白这个本质之后,思考,咱如何不断的获取新知识来充实自己。 每天逼着自己去突破舒适区,去没去过的地方,体验没体验过的,写作,阅读,看新剧 2.建立目标感 目标主要是为了不让我们被日常的虚无主义吞噬自我,让我们快被淹没的时候能够看到救命稻草。 3.写作 看到充实二字的时候,我想到的就是写作。流水账和写作的区别在于,写作可以加入一些评价和思考。 做了一件事–》流水账 做这件事它好不好,好在哪里,怎么吸引我 不够好的地方,怎么优化,给我的启迪。 如果我来设计,怎么做。 4.主题阅读和学习 《越读者》给我印象深刻的就是作者写的一段关于以【爱情】为主题的阅读的旅程,怎么检索,怎么从不同的哲学角度看待。 而我自己,一直在阅读的一个主题是关于建国后的一段历史的阅读,于《黄金时代》中描述的文革感兴趣,然后去看《邓小平时代》看怎么破局的。…
Read more ⟶

The_art_of_command_line


参考the art of command line in github 和自己的之前的积累 定时记录top的命令 watch -n 1 "top -b -d 1 -n 1 >> mem.log" find 命令 和xargs find . -type f | xargs grep ... for fun: 查看自己history中排名前十的命令 history | awk '{CMD[$2]++;count++;} END { for (a in CMD )print CMD[ a ]" " CMD[ a ]/count*100 "% " a }' | grep -v "./" | column -c3 -s " " -t |sort -nr | nl | head -n10…
Read more ⟶

Cpp编码转换


c99 函数库 #include <iostream> #include <assert.h> #include <string> #include <fstream> #include <stdlib.h> #include <locale.h> #ifdef _WIN32 #define CSET_GBK "936" #define CSET_UTF8 "65001" #define LC_NAME_zh_CN "Chinese_People's Republic of China" #else #define CSET_GBK "GBK" #define CSET_UTF8 "UTF-8" #define LC_NAME_zh_CN "zh_CN" #endif #define LC_NAME_zh_CN_GBK LC_NAME_zh_CN "." CSET_GBK #define LC_NAME_zh_CN_UTF8 LC_NAME_zh_CN "." CSET_UTF8 bool Gb2312utf8(int i, const std::string &src, std::string &utfstr) { if (setlocale(LC_ALL, "zh_CN.gbk") == NULL) { std::cout << "setlocale failed, param is bad" << std::endl; return false; } int unicode_len = mbstowcs(NULL, src.…
Read more ⟶

clang-format配置


https://clang.llvm.org/docs/ClangFormat.html 详细配置说明 clang-format -style=llvm -dump-config > .clang-format --- # 语言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto Language: Cpp # BasedOnStyle: LLVM # 访问说明符(public、private等)的偏移 AccessModifierOffset: -2 # 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行) AlignAfterOpenBracket: Align # 连续赋值时,对齐所有等号 AlignConsecutiveAssignments: true # 连续声明时,对齐所有声明的变量名 AlignConsecutiveDeclarations: true AlignEscapedNewlines: Right # 左对齐逃脱换行(使用反斜杠换行)的反斜杠 #AlignEscapedNewlinesLeft: true # 水平对齐二元和三元表达式的操作数 AlignOperands: true # 对齐连续的尾随的注释 AlignTrailingComments: true # 允许函数声明的所有参数在放在下一行 AllowAllParametersOfDeclarationOnNextLine: false # 允许短的块放在同一行 AllowShortBlocksOnASingleLine: true # 允许短的case标签放在同一行 AllowShortCaseLabelsOnASingleLine: true # 允许短的函数放在同一行: None, InlineOnly(定义在类中), Empty(空函数), Inline(定义在类中,空函数), All AllowShortFunctionsOnASingleLine: Empty # 允许短的if语句保持在同一行 AllowShortIfStatementsOnASingleLine: false # 允许短的循环保持在同一行 AllowShortLoopsOnASingleLine: false # 总是在定义返回类型后换行(deprecated) AlwaysBreakAfterDefinitionReturnType: None # 总是在返回类型后换行: None, All, TopLevel(顶级函数,不包括在类中的函数), # AllDefinitions(所有的定义,不包括声明), TopLevelDefinitions(所有的顶级函数的定义) AlwaysBreakAfterReturnType: None # 总是在多行string字面量前换行 AlwaysBreakBeforeMultilineStrings: false # 总是在template声明后换行 AlwaysBreakTemplateDeclarations: false # false表示函数实参要么都在同一行,要么都各自一行 BinPackArguments: true # false表示所有形参要么都在同一行,要么都各自一行 BinPackParameters: false # 大括号换行,只有当BreakBeforeBraces设置为Custom时才有效 BraceWrapping: # class定义后面 AfterClass: false # 控制语句后面 AfterControlStatement: false # enum定义后面 AfterEnum: false # 函数定义后面 AfterFunction: true # 命名空间定义后面 AfterNamespace: false # ObjC定义后面 AfterObjCDeclaration: false # struct定义后面 AfterStruct: true # union定义后面 AfterUnion: true AfterExternBlock: false # catch之前 BeforeCatch: true # else之前 BeforeElse: true # 缩进大括号 IndentBraces: false SplitEmptyFunction: true SplitEmptyRecord: true SplitEmptyNamespace: true # 在二元运算符前换行: None(在操作符后换行), NonAssignment(在非赋值的操作符前换行), All(在操作符前换行) BreakBeforeBinaryOperators: None # 在大括号前换行: Attach(始终将大括号附加到周围的上下文), Linux(除函数、命名空间和类定义,与Attach类似), # Mozilla(除枚举、函数、记录定义,与Attach类似), Stroustrup(除函数定义、catch、else,与Attach类似), # Allman(总是在大括号前换行), GNU(总是在大括号前换行,并对于控制语句的大括号增加额外的缩进), WebKit(在函数前换行), Custom # 注:这里认为语句块也属于函数 BreakBeforeBraces: Custom # 在三元运算符前换行 BreakBeforeTernaryOperators: false # 在构造函数的初始化列表的逗号前换行 BreakConstructorInitializersBeforeComma: false BreakConstructorInitializers: BeforeColon # 每行字符的限制,0表示没有限制 ColumnLimit: 80 # 描述具有特殊意义的注释的正则表达式,它不应该被分割为多行或以其它方式改变 CommentPragmas: '^ IWYU pragma:' CompactNamespaces: false # 构造函数的初始化列表要么都在同一行,要么都各自一行 ConstructorInitializerAllOnOneLineOrOnePerLine: false # 构造函数的初始化列表的缩进宽度 ConstructorInitializerIndentWidth: 4 # 延续的行的缩进宽度 ContinuationIndentWidth: 4 # 去除C++11的列表初始化的大括号{后和}前的空格 Cpp11BracedListStyle: true # 继承最常用的指针和引用的对齐方式 DerivePointerAlignment: false # 关闭格式化 DisableFormat: false # 自动检测函数的调用和定义是否被格式为每行一个参数(Experimental) ExperimentalAutoDetectBinPacking: false # 需要被解读为foreach循环而不是函数调用的宏 ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] # 对#include进行排序,匹配了某正则表达式的#include拥有对应的优先级,匹配不到的则默认优先级为INT_MAX(优先级越小排序越靠前), # 可以定义负数优先级从而保证某些#include永远在最前面 IncludeCategories: - Regex: '^"(llvm|llvm-c|clang|clang-c)/' Priority: 2 - Regex: '^(<|"(gtest|isl|json)/)' Priority: 3 - Regex: '.…
Read more ⟶

UDP最大传输


转自UDP最大传输 概念 以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的. 这个1500字节被称为链路层的MTU(最大传输单元). 但这并不是指链路层的长度被限制在1500字节,其实这这个MTU指的是链路层的数据区.并不包括链路层的首部和尾部的18个字节. 所以,事实上,这个1500字节就是网络层IP数据报的长度限制. 因为IP数据报的首部为20字节,所以IP数据报的数据区长度最大为1480字节. 而这个1480字节就是用来放TCP传来的TCP报文段或UDP传来的UDP数据报的. 又因为UDP数据报的首部8字节,所以 **UDP数据报的数据区最大长度为1472字节** . 这个1472字节就是我们可以使用的字节数。 原因 当我们发送的UDP数据大于1472的时候会怎样呢? 这也就是说IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation). 把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组. 这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收方便 无法重组数据报.将导致丢弃整个UDP数据报。 因此,在普通的局域网环境下,我建议将UDP的数据控制在1472字节以下为好. 进行Internet编程时则不同,因为Internet上的路由器可能会将MTU设为不同的值. 如果我们假定MTU为1500来发送数据的,而途经的某个网络的MTU值小于1500字节,那么系统将会使用一系列的机制来调整MTU值,使数据报能够顺利到达目的地,这样就会做许多不必要的操作. 结语 鉴于Internet上的标准MTU值为576字节,所以我建议在进行Internet的UDP编程时. 最好将UDP的数据长度控件在548字节(576-8-20)以内.…
Read more ⟶

我的C++开发环境


开发场景一:macbook + 远程内网linux开发 vscode 配置 插件列表:clangd,cmake,remote-ssh,gitlens,copilot/continue,vscode-icons,GDB Debug clangd 安装clangd-server centos8/ubuntu20.04 可以直接安装新版本,参考clangd page。 centos7则需要单独编译安装一套glic2.18以上的库。参考这里。 vscode配置 "clangd.arguments": [ "--log=verbose", "--header-insertion=iwyu", "--pch-storage=memory", "--function-arg-placeholders=false", "--background-index", "--clang-tidy", "-j=12", ], "clangd.path": "/path/to/clangd", remote + github copilot + 离线 https://github.com/orgs/community/discussions/6942 “remote.extensionKind”: { “GitHub.copilot”: [“ui”], “GitHub.copilot-chat”: [“ui”], “linhmtran168.mac-ca-vscode”: [“ui”], } Here’s why it works: https://code.visualstudio.com/api/advanced-topics/extension-host cmake-tools …
Read more ⟶

2023年过去了


相顾无相识,长歌怀采薇。 2023年干了件大事,结婚🎎。 也发生了很多事情,属于两个人的记忆量在这一年极速暴涨,甚至需要后续慢慢回味。 往后的日子,更多的记录,甚至日记。 感觉大脑已经满载了,要多开发第二大脑。 写写走走,有空来写一个2023年的感悟和总结。 我的照片中的2023年 一月 起始,回家,一起,过年,开封。 二月 chatgpt,apple watch,眼镜,砂糖橘,转圈的狗狗,南门涮肉,腌笃鲜,剪头发,强哥(卖鱼的) 三月 大鹅,下棋♟️,3月8日花花,下班一起回家,韩式炸鸡,莫妮卡,科技博物馆,钓鱼,带盒饭, 四月 长沙,回家,漏水,找房,算账,春天,绿色和花花,榴莲,羽毛球,山姆牛排,六号线的相遇,周大福, 五月 求婚,搬家,宜家,冈本,年终奖,万岛,董子粉红花花,董子阳了,天空真蓝,拼图,后来潘子也阳了。 六月 苏州行,夏天来了,新家新生活,杨梅汤,荷花,董子换工作啦。 七月 杭州莫干山快乐两天游,董子买新裙子,炎炎夏日杭州寺庙,山姆日常购物,西瓜,潘子还在下棋,夏天真快乐,短裤出游,裙子出游,天空也很好看,董子生气去宜家,董子看恋综,潘子还在打羽毛球, 八月 天空更美了,拍好多,羽毛球,游泳,和姐姐他们,生日,拍照,包饺子,有巨大的彩虹,婚博会,薄荷,下雨,迪斯尼,看衣服鞋子,牛肋条, 九月 电动车,潘子开始玩其他游戏了,羽毛球接着打,买了自拍杆好开心,室友来上海,试婚纱,去医院了,夜晚的天空也很好看,姐姐送了一个很好的包,结婚倒计时, 十月 结婚喽,婚纱真好看,结婚很开心,大理,洱海,700一顿的好看餐厅,杨丽萍的居所,电动车,咖啡店,董子酣睡,钓鱼去,city work某某塔,迪斯尼特惠卖,美甲,周边探索,狗惊魂,户口本 十一月 拍婚纱喽,领证照片的纠结,喂流浪猫,爷爷写的喜字,领证喽,迪斯尼,慵懒city work,喂猫, 十二月 city work,去澳门了,吃好吃的,看好玩的,去三亚了,海真不错,带爸妈出门了,真好呀。在开封回门宴 2023年我的个人总结词:新阶段,新旅途,新起点。 浏览遍历一遍去年的记录,能感受到,春夏的魅力,自然最美丽,那时候会关注自然的一切,秋天静谧温和,属于是人和自然的和谐,冬天就封闭了,更关注自己。 2023年的话语 生命太短暂,不能花在那些不值得阅读的内容上面。就算你是一个很爱读书的人,活到70岁最多大概能阅读15000本书,这只占世界最大图书馆美国国会图书馆3800万册藏书的0.04%。我们一生中能够阅读的书籍其实很少。因此,关键技能不是多读,而是跳过那些不值得读的内容。 可以先看看巴菲特相关的书。塔勒布写的几本书也不错。《李嘉诚传》也挺有用。 “长板问题"指的是,问题的关键不在于最弱点,而在于最强点。 只要有一个点特别出色,这件事情就成功了,其他点的好坏无所谓。文艺作品就属于这种情况。你购买了一张专辑,其他的歌曲都不爱听,但是有一首歌你特别喜欢,这张专辑就值得了。电影和小说只要有一个角色或情节特别打动人,作品就成功了。风险投资也是这样,只要投了一个特别成功的项目,就能把所有损失补回来。最重要的是,人生就是一个"长板问题”。 一生中,失败和挫折其实不重要,多少次都不重要,只要有一次大的成功,人生就成功了。最大的那一次成功,决定了你一生的成就和高度。很多诺贝尔奖得主,一生就做出了一个重要的科学发现,就足够成为伟大科学家了。程序员写过多少代码不重要,只要创造过一个重大影响力的软件,职业生涯就成功了。我们必须学会区分"短板问题"和"长板问题",它们的解决方法完全不同。 短板问题的解决,需要盯着薄弱环节,补齐最短的那块板;长板问题的解决,只需要推进最强的环节,不要在乎别的。人生不必在乎那些不重要的事情,没必要为了挫折和拒绝而沮丧,都会过去的。你要做的是向前看,拼命争取一次大的成功,让它足够大、更大,只要一次就够了。 月明闻杜宇 南北总关心 但是我想说的就是,所有的路都是可以走的,不用担心。但不是纯靠坚持,关键是你一定要去想方法,想更好的、更优的解,这个事很关键,千万不要使蛮力,没有太大意义。这是我创业学会的第一个道理。方法会比努力更重要,所以我们不加班,如果团队在加班,我觉得我们肯定方法不对。我创业学会的第二个道理是关注你的重点,不追小兔子。能让你分心的事情太多太多了,你不知道你前面那座城池有多高。因为你从来没见过,一路上都会有很多很多的小兔子来找你。你一看,这个兔子好看,我来追一下,那边又有一只蝴蝶,你就忘了你未来要去哪。 相机入门: 索尼a7r3或者尼康z72 节俭和抠门的唯一区别,就是有没有“以人为本”这个概念。 以太坊发明者 Vitalik Buterin 在创建以太坊之前,是一名记者,为比特币杂志撰稿。 他(或者他的父亲)说,他们相信写作帮助他理清了思想。 得意时,不放纵自己;失落时,不放弃自己。 I guess I am inspired by the quote Feynman left on his blackboard - “that which I cannot recreate I do not understand” 我想我的灵感来自费曼留在黑板上的一句话——“我无法重现的东西我不明白” “纯真而不欠闻达,善良而不失坚强,把生命高举在尘俗之上,又融化于社会之中,这应当是我们这一代人的共同追求。” ——李克强 光而不耀,静水流深。 “我不停的看书,看文学历史,不停地走,看山川大地。尽管这些书,这些路,可能与我的未来无关,但他们教会了我思考。未来我可能一无是处,籍籍无名,甚至一无所有,或许莫名其妙的死了,又或许莫名其妙的活着。但这些都不重要。重要的是我要知道自己成为一个什么的人,这是一种精神,它能滋养我的灵魂,与前途无关,与钱财无关,与他人无关。人不应该是一张白纸,只写着酒色财气,功名利禄的,潦草的一张纸。 2023年的书和资源 《与鲁迅相遇:北大演讲录》 看了两章 《经济学原理》[美]曼昆 《李嘉诚传》 《自洽》 《rework》 …
Read more ⟶

我的电影


谨以此献给我最爱看电影的大二岁月 大一的时候遇到了孔佳敏英语老师,那个时候不仅崇拜她的英语,更加崇拜她的电影啊,电影迷是怎么炼成的。。。 然后我就开始搜索电影了,首先找到的是豆瓣电影啊,豆瓣排名250的电影,简直让我喜欢啊。 看电影是一种享受,也是一种思考。最大的感觉就是电影用短暂的90分钟来让你看完一生才能看到的东西,所以说人生如戏。 20岁看的电影 《肖申克的救赎》 经典中的王者了,高中语文老师给看了,至今依然在豆瓣评分排名第一啊,而且经典在于没看一次感触都不一样啊,还喜欢豆瓣很多大牛写的评论。 《幸福终点站》 主人公很可爱,看完之后自己也有一种幸福感,很喜欢呢(最佩服的是主人公竟然在电视上把英语学会了),其实电影据说是改编之真实的故事,当得知自己的祖国的混乱,二自己的国家不存在时,他伤心的叫人看(那一刻是多么揪心的) 《当幸福来敲门》 威尔.史密斯的电影,当年就因为这部电影之后,我基本把他的所有好看电影都给看了。然后对外国的电影明星最爱的就是他。 电影从头到尾都是在一种很压抑的感觉,当时我自己的感觉是如果主人公再没有得到工作我都想哭了,后来终于成功了,感觉想大声的叫出来。(很经典,值得一看) 《搏击俱乐部》 心理学电影(俗称精神病电影),看这部电影之前我看了《大象》,因为在“电影推荐吧”看到“心理学电影”这个词,搜了下,搜到这里。 这部电影,主人公很帅气呢(下次看看他叫啥),从开头到结尾都是在说主人公因为人格分裂出现各种病态,最后结果我是没有想到,直到最后我才知道原来如此。 《这个杀手不太冷》 还记得自己看这部电影很奇特,因为我记得那一天我在电视上看到了这部电影的后半部分,我是被杀手Leon的动作戏吸引了,然后没头的看完了这部电影,唯一让我惊叹的是杀手真厉害。那时候我初中没毕业。 后来,突然有一天有人说这部电影很经典,看了之后才想起来原来小时候看过呢,那时候我高中了。 这部电影很美,看了之后就这个感觉。 《美丽人生》 开始很搞笑,后来知道这是为后面的悲情做铺垫的。 老爸为了儿子不害怕,一直告诉他是在游戏,很不错的电影 《海上钢琴师》 印象最深刻的是当他走上船口准备下船的时候,我整个人都激动了,我在想他下去后,人们发现他的钢琴能力,他成名,他烦恼陆地的生活,遇到自己爱的美丽的公主 经典 《千与千寻》 看了很多关于这个的评论,觉得我享受的是宫崎骏的电影,很美,但是要了解一部电影,明白他要表达的东西却不容易,因为他是在一个我不了解的背景里写下这些东西,所以我会花时间去了解我喜欢的这部电影的背景。 《月光宝盒》 两部电影《月光宝盒之仙履奇缘》 很多年前喜欢星爷的电影,来到大学之后搜索了很多星爷的信息,发现我崇拜的星爷并不是那么爱露面的人。 《足球尤物》 一部励志?性别?喜剧 电影,我喜欢,女主角很有性格 《那些年我们一起追过的女孩》 一部代表青春的电影,最后没有在一起的结局才是完美的。 26岁看的电影 《少年时代》 好长的一部电影啊,两小时45分钟啊,不过确实人生的前半生。 电影围绕主人公从小时候到大为主线来描写的。 给人很多回想,也给人很多思考,总体来说很不错的电影呢 《后会无期》 一部我至今感觉我没有把它看懂的电影,又觉得他那么美的电影 ####### 克里斯托弗·诺兰 电影系列 14. 《星际穿越》 好吧,大片,拍的好 15. 《蝙蝠侠前传1,2,3》 用了三天看完的,每一集都有一个理念贯穿着整个电影, 16. 《致命魔术》 以魔术为主题,讲述两个人,一个人不爱创新但是会创造场景包装自己,他很快出名了,一个人很会创新。最后还有特斯拉登场,第二次工业革命的创造人。 ############## 17. 《蛮荒故事》 6个小故事,毫不相关,但是且并不让人觉得反感 18. 《荒野猎人》 小李子的获奖作品,很好 19. 《实习生》 在我正在实习的时候看的,里面的莫名喜感,还有人生经验在里面 20. 《穿普拉达的女王》 好吧,里面的衣服搭配很出名 21. 《老炮儿》 规矩 22.…
Read more ⟶

抗美援朝题材电影


蓦然回首,那人却在,灯火阑珊处。看了很多电影,有很多经典画面留在心间,2021年的十一想待在家里看建国题材的所有电影,正好现在有看抗美援朝题材的想法,就在此收集下。 1952年,中国人民志愿军在极端困难的条件下,取得艰苦卓绝的上甘岭战役的胜利,消息传回国内,毛泽东主席对前线战士舍生忘死的动人事迹深为动容,批示要将此拍成电影、送达千家万户。 这是中国电影史上第一次、也是唯一一次由党和国家最高领导人亲自推动的主题创作,它的特殊性,不言而喻。 早期的 《上甘岭》 1956年 首部抗美援朝题材电影 豆瓣评分: 8.1 《长空比翼》 《友谊》 《奇袭》 豆瓣评分:7.2 推荐理由:电影以教科书般的专业手法,再现了毛主席的人民战争伟大思想。用朴实感人的镜头,记录了中朝人民用鲜血凝成的真挚友谊。 剧情简介:在朝鲜战场上,志愿军某部连长,率一支侦察小队,深入敌后,炸毁一座重要的公路桥,以切断敌人退路的故事。 他们化装成美军巡逻队,吓跑了运输队,救出朝鲜老大妈阿妈妮。 在朝鲜游击队的帮助下,侦察队炸毁了康平桥,配合大部队,全部消灭了敌人。 《三八线上》 《英雄坦克手》 《英雄儿女》 《碧海红波》 《激战无名川》 《飞虎》 《较量》 豆瓣评分:8.0 剧情简介:刚刚诞生的中华人民共和国的参战,既是保家卫国的需要,又是支援唇齿相依的友邦的需要。 面对强大的以美国为首的联合国军队,虽然中朝人民经受了艰难困苦及极残酷的考验,中国人民志愿军和朝鲜人民军并肩战斗3年,胜利签订停战协定。 这场战争是人心的较量,是正义与邪恶的较量,最终正义战争取得胜利是必然的结果。 新变期 “微观切入”视点、“英雄赞歌”模式、“知其不可为而为”基调,三个关键词,立住了“经典形态” 《金刚川》 《狙击手》 《长津湖》 《志愿军:雄兵出击》 …
Read more ⟶

多网卡组播接收数据的坑点


接收组播需要设置local_ip 目的是为了让内核知道是哪个网卡接收组播数据,否则内核会随机选择一个网卡接收组播数据。 一、绑定网卡的设置 多网卡指定一个网卡接收组播的三个关键设置: 接收udp组播的网卡ip,必须设置为跟组播发送ip一个网段的ip,否则接收不到组播数据。 代码里本地监听bind地址必须是0.0.0.0,端口为组播端口。 代码加入组播addmembership指定imr_interface的ip地址为接收组播的网卡ip。 代码demo参考:multicast_receiver.c 指定源组播,linux和windows编程稍微有差别: linux: bind 的是组播地址和组播端口 windows:bind 的是接收网卡的地址ip和组播端口 二、组播相关设置和错误现象描述 1.防火墙状态查询 systemctl status firewalld #查询防火墙状态 Active: inactive (dead) 则为关闭状态 systemctl stop firewalld.service #关闭防火墙 2. 网卡过滤组播包设置 1 看接受组播的网卡是否过滤了: cat /proc/sys/net/ipv4/conf/en4/rp_filter 如果是0, good。 2 看all网卡是否过滤了: cat /proc/sys/net/ipv4/conf/all/rp_filter 如果是0, good。 这两个值都必须是0,才行!如果不是0,这样修改: 3 临时修改取消过滤: sudo sysctl -w net.ipv4.conf.en4.rp_filter=0 sudo sysctl -w net.ipv4.conf.all.rp_filter=0 4 永久修改取消过滤(重启亦有效): sudo vi /etc/sysctl.conf 改为: net.ipv4.conf.default.rp_filter=0 net.ipv4.conf.all.rp_filter=0 rp_filter参数介绍 rp_filter参数用于控制系统是否开启对数据包源地址的校验。 首先看一下Linux内核文档documentation/networking/ip-sysctl.txt中的描述: 即rp_filter参数有三个值,0、1、2,具体含义: 0:不开启源地址校验。 1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。 2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包。 什么是反向路由校验 所谓反向路由校验,就是在一个网卡收到数据包后,把源地址和目标地址对调后查找路由出口,从而得到反身后路由出口。然后根据反向路由出口进行过滤。…
Read more ⟶