C代码转C#

wowclassic 2019-12-27 01:45:21
求助各位大佬转换以下代码谢谢。 char tmp[]; Buffer buffer; // 网络循环:必须在一个循环中读取网络,因为网络数据是源源不断的。 while(1){ // 从TCP流中读取不定长度的一段流数据,不能保证读到的数据是你期望的长度 tcp.read(tmp); // 将这段流数据和之前收到的流数据拼接到一起 buffer.append(tmp); // 解析循环:必须在一个循环中解析报文,应对所谓的粘包 while(1){ // 尝试解析报文 msg = parse(buffer); if(!msg){ // 报文还没有准备好,糟糕,我们遇到拆包了!跳出解析循环,继续读网络。 break; } // 将解析过的报文对应的流数据清除 buffer.remove(msg.length); // 业务处理 process(msg); } }
...全文
93 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wowclassic 2019-12-31
  • 打赏
  • 举报
回复
引用 8 楼 wanghui0380 的回复:
不要纠结了,既然你还无法理解,那就先用现成的东西dotnetty
观念不到,不必强追。等观念到了,自然而然就会了。

其实git和nuget上都有一堆做的还成的,不过我推荐dotnetty,这是微软Azure开发小组闲着无聊翻译的java的netty,毕竟是Azure小组开发质量有保证,毕竟原版netty也是apache的顶级项目,毕竟原版netty资料众多,坑都被趟平了


大佬您好!
现成的我也看过,比如DotNetty,Supersocket这些,可是没有入门资料,DEMO太难了。
wanghui0380 2019-12-31
  • 打赏
  • 举报
回复
不要纠结了,既然你还无法理解,那就先用现成的东西dotnetty 观念不到,不必强追。等观念到了,自然而然就会了。 其实git和nuget上都有一堆做的还成的,不过我推荐dotnetty,这是微软Azure开发小组闲着无聊翻译的java的netty,毕竟是Azure小组开发质量有保证,毕竟原版netty也是apache的顶级项目,毕竟原版netty资料众多,坑都被趟平了
wowclassic 2019-12-31
  • 打赏
  • 举报
回复
引用 5 楼 xian_wwq 的回复:
这个代码顶多算是伪代码
具体的拼包、解包逻辑都没有呀
要做个商用软件,必须得考虑
1. 接收和解析要分离
2. 改为异步方式处理,而不是死循环+ 同步


苦手翻了马骏等人的数本书,想找到C#实现粘包处理的办法无解,要么太难看不懂,要么根本就没办法处理粘包。
wowclassic 2019-12-31
  • 打赏
  • 举报
回复
引用 5 楼 xian_wwq 的回复:
这个代码顶多算是伪代码
具体的拼包、解包逻辑都没有呀
要做个商用软件,必须得考虑
1. 接收和解析要分离
2. 改为异步方式处理,而不是死循环+ 同步



这个是源贴,我在寻找解决粘包的办法。
http://m.udpwork.com/item/16902.html
xian_wwq 2019-12-30
  • 打赏
  • 举报
回复
这个代码顶多算是伪代码 具体的拼包、解包逻辑都没有呀 要做个商用软件,必须得考虑 1. 接收和解析要分离 2. 改为异步方式处理,而不是死循环+ 同步
wowclassic 2019-12-30
  • 打赏
  • 举报
回复
想要处理C#粘包啦!
threenewbee 2019-12-29
  • 打赏
  • 举报
回复
parse remove process 主要功能都封装在这些里面
而这些保不齐又调用了某些库函数,这些库C#未必有。
所以建议你分析好协议,从顶层改写,而不是什么代码转换
jx315425246 2019-12-29
  • 打赏
  • 举报
回复
c代码中没有 “.”操作符,如果不是c的话,请提供tcp类,Buffer数据类型

110,529

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧