全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 1037|回复: 39

【已解决】有没有golang大手子,问题求解

[复制链接]
发表于 2024-11-19 17:21:27 | 显示全部楼层 |阅读模式
本帖最后由 zhou 于 2024-11-20 10:35 编辑

需要真大手子,不懂go的就别乱讲了
net.Conn如何多次Read,仅实现这种方式,不要讲别的(比如读取后保存,如果能实现读取后再放回去也可以)
实现后再跟帖,不要已读乱回 GPT不行! GPT不行! GPT不行!

补一个大概的例子

 楼主| 发表于 2024-11-20 10:35:10 | 显示全部楼层
本帖最后由 zhou 于 2024-11-20 10:41 编辑

已解决,感谢@哈宝儿  大佬提供思路
参考 stackoverflow: https://stackoverflow.com/questions/26196813/peek-into-conn-without-reading-in-go


我不理解有些人为什么一直GPT GPT的,并且无差别喷懂不懂的,既然你那么懂,倒是给出解决方案啊???在这里无脑就喷我目的是让你显眼吗???
发表于 2024-11-19 18:17:59 | 显示全部楼层
当你认为GPT连这种基础的技术问题都解决不了的时候应该先问问自己的问题有没有问题
发表于 2024-11-19 17:48:12 | 显示全部楼层
楼主真的了解并且明白自己的需求是什么吗?
你自己明白多次Read意味着什么吗?多次Read的前提条件是什么你知道吗?
发表于 2024-11-19 18:12:39 | 显示全部楼层
本帖最后由 迷茫的tom 于 2024-11-19 18:15 编辑
zhou 发表于 2024-11-19 18:01
客户端就是只发一次,本贴的目的是在服务端Read两次,请问你有什么高见?????

...


没有啥高见,因为流式io和缓冲区设计的时候就不是给你这样用的,不止是net.Conn,基本大部分主流语言对于都是连接流Read完之后就从缓冲区移除
你的数据你都拿完了,后面的你爱存还是怎么样都是你自己的事情,如果你有十分重要的需求,必须要这么做,你可以重写或者重新实现自己的net.Conn包,然后在读取时,再存回去
最后,我没开玩笑,你应该好好审视自己的需求
发表于 2024-11-19 17:23:57 | 显示全部楼层
golang这么先进的lang难道read不能传大小的吗?

点评

傻逼HOH,连问题是什么都不知道  发表于 2024-11-19 18:48
发表于 2024-11-19 19:30:06 | 显示全部楼层
zhou 发表于 2024-11-19 17:34
当然不行,常见方法都试过了

tcp socket里面,要么你就自己粘包处理,要么就ReadFull让go给你自动粘包一次性读完所有客户端发来的数据,从你的回帖可以看出你对socket机制确实都不熟悉,所以没法沟通。
发表于 2024-11-19 17:56:54 | 显示全部楼层
欧阳逍遥 发表于 2024-11-19 17:50
你应该把 服务端 和 客户端代码都贴出来。。。

客户端可以循环读, 但是也要服务端 循环发才行。


他一直只能读一次的原因,很大概率是客户端的问题,客户端不一直发消息,服务端哪里能收到消息噢
但是他自己估计一直在懵逼,因为我推测他连短连接长连接,还有tcp/udp都不清楚,所以你们跟他说什么数据包包头之类他才啥都不知道,甚至连自己在问啥估计都还懵逼着
不过也很正常,谁都是从小白过来的
发表于 2024-11-20 12:56:43 | 显示全部楼层
本帖最后由 哈宝儿 于 2024-11-20 13:00 编辑
zhou 发表于 2024-11-20 10:35
已解决,感谢@哈宝儿  大佬提供思路
参考 stackoverflow: https://stackoverflow.com/questions/26196813/p ...


不能怪大家,我觉得你这个描述可能没接触到过这块需求的人应该是联想不到 Peek 。

编程中,这种 对数据源只读不取的方式 通用叫法 PeekData .
发表于 2024-11-19 17:25:01 | 显示全部楼层
gpt分分钟搞定      
 楼主| 发表于 2024-11-19 17:27:40 | 显示全部楼层

GPT能解决我还来发帖干嘛
发表于 2024-11-19 17:28:55 | 显示全部楼层
for{

循环读。。。。

}
 楼主| 发表于 2024-11-19 17:29:33 | 显示全部楼层
欧阳逍遥 发表于 2024-11-19 17:28
for{

循环读。。。。

不行的,读完一次就没了
发表于 2024-11-19 17:31:31 | 显示全部楼层
本帖最后由 欧阳逍遥 于 2024-11-19 17:33 编辑
zhou 发表于 2024-11-19 17:29
不行的,读完一次就没了


用  conn.Read(buf); 读。 自己实现包头,比如前几个字节 存储包头 长度 包体类型什么的, 后面存包体。
发表于 2024-11-19 17:32:41 | 显示全部楼层
io.ReadFull

 楼主| 发表于 2024-11-19 17:33:31 | 显示全部楼层
欧阳逍遥 发表于 2024-11-19 17:31
用  conn.Read(buf); 读。 自己实现包头

不管哪种方式conn读完就没了,后面半句没懂什么意思
 楼主| 发表于 2024-11-19 17:34:35 | 显示全部楼层

当然不行,常见方法都试过了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-1-30 11:38 , Processed in 0.071270 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表