全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
楼主: zhou

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

[复制链接]
 楼主| 发表于 2024-11-19 18:01:29 | 显示全部楼层
迷茫的tom 发表于 2024-11-19 17:56
他一直只能读一次的原因,很大概率是客户端的问题,客户端不一直发消息,服务端哪里能收到消息噢
但是他 ...

客户端就是只发一次,本贴的目的是在服务端Read两次,请问你有什么高见?????

 楼主| 发表于 2024-11-19 18:03:05 | 显示全部楼层
loop321 发表于 2024-11-19 17:59
项目中的代码,可以参考一下:

gin是可以这样的。读完再放回去,但是tcp socket没有这样的写法...
发表于 2024-11-19 18:05:50 | 显示全部楼层
本帖最后由 欧阳逍遥 于 2024-11-19 18:10 编辑
zhou 发表于 2024-11-19 18:01
客户端就是只发一次,本贴的目的是在服务端Read两次,请问你有什么高见?????

...




你这写的完全没有逻辑。。。。  首先你客户端是短连接 发完就 断开了。

你服务端 读取 不用协程处理 conn ??? 你客户端就发了一次。。。 可不就只收到一条。。。

客户端  Write 外面加 循环 ,才是长连接 循环发送。

你这就是啥都不会啊。。。。

或者你这么改就能循环读了。。 但是 读第二条要删掉。。。 因为 永远不可能收到。。。

conn,_:=ln.accept()
go func(){ //读取用协程读
        //读取 逻辑 , 客户端发送 只发送一次 你就只能读一次。。
}
发表于 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 18:17:59 | 显示全部楼层
当你认为GPT连这种基础的技术问题都解决不了的时候应该先问问自己的问题有没有问题
发表于 2024-11-19 18:41:03 来自手机 | 显示全部楼层
缓冲区被read了之后就释放了呀 ,为什么要read两次,你不能read一次之后自己缓存起来吗
发表于 2024-11-19 18:44:47 来自手机 | 显示全部楼层
应该想想怎么把Conn结构体实现深拷贝
发表于 2024-11-19 18:48:56 来自手机 | 显示全部楼层
自己搞个缓冲区,想独几次读几次
发表于 2024-11-19 18:50:04 来自手机 | 显示全部楼层
准确的说是,读到的数据用自定义格式 全部打到chan队列,读了再丢回去可以一直读
发表于 2024-11-19 18:57:34 来自手机 | 显示全部楼层
图一中 从Conn读了一次到buffer,那为什么第二次不可以从第一个buffer中复制一份,两次读取的内容不一样吗?我记得TCP这块是要解决粘包问题,一次缓冲区装不下的话,是读不完的  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-1-31 00:37 , Processed in 0.062663 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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