首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在不预先指定字节片长度的情况下,使用net.TCPConn在golang中读取?

如何在不预先指定字节片长度的情况下,使用net.TCPConn在golang中读取?
EN

Stack Overflow用户
提问于 2014-07-03 08:04:09
回答 2查看 1.1K关注 0票数 0

我试图从与redis客户端的tcp连接(一个正在运行redis-cli的终端)中读取一些消息。但是,net包的朗读命令要求我提供一个片段作为参数。每当我给一个没有长度的切片时,连接就会崩溃,围棋程序就会停止。我不知道我的字节消息需要多少长度。因此,除非我指定了一些大得离谱的片段,否则这个连接将始终关闭,尽管这似乎是浪费。我想知道,不需要事先知道消息的长度,就能保持联系吗?我很想解决我的具体问题,但我觉得这个问题比较笼统。为什么我要知道手边的长度?图书馆就不能给我一片合适的尺寸吗?

或者人们建议的其他解决方案是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-03 08:45:01

不知道消息大小正是您必须指定读取大小的原因(这适用于任何网络库,而不仅仅是Go)。TCP是一种流协议。就TCP协议而言,消息一直持续到连接关闭为止。

如果您知道要阅读到EOF,请使用ioutil.ReadAll

打电话给Read并不能保证给你带来你所期望的一切。它可能返回的较少,它可能返回更多,这取决于您已经收到的数据。做IO的库通常通过一个“缓冲区”进行读写;您将拥有"read“,这是一个预先分配的字节段(最多32k是常见的),并且您每次想从网络中读取时都重复使用该块。这就是IO函数返回字节数的原因,因此您知道上次操作填充了多少缓冲区。如果缓冲区已被填充,或者仍然需要更多数据,则只需再次调用Read即可。

票数 6
EN

Stack Overflow用户

发布于 2021-05-08 09:58:51

有点晚了但是..。

  1. 问题之一是如何确定消息大小。JimB给出的答案是,TCP是一个流协议,所以没有真正的目的。
  2. 我相信这个答案是不正确的。TCP将比特流分成顺序分组。每个数据包都有一个IP报头和一个TCP报头(参见维基百科这里 )。每个数据包的IP报头包含该数据包长度的字段。为了得到实际的数据长度,您必须做一些数学运算才能减去TCP头长度。此外,可以在TCP报头中指定消息的最大长度。
  3. 因此,您可以为读取操作提供足够长度的缓冲区。但是,您必须首先读取数据包报头信息。如果最大消息大小比您愿意接受的长度长,您可能不应该接受TCP连接。
  4. 通常,发送方将终止与fin数据包的连接(请参阅1),而不是EOF字符。
  5. 读取操作中的EOF最有可能表示没有在分配的时间内完全传输包。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24558535

复制
相关文章
Spring在无RedirectAttributes的情况下(如Interceptor中)使用Flash scope
判断逻辑很简单,但是重定向的时候需要前台有消息提示,如果是在Controller中,可以在方法上注入RedirectAttributes参数,但是Interceptor中默认没有这个参数,那么我们如何实现RedirectAttributes的flashMessage功能呢?
飞奔去旅行
2019/06/13
5.5K0
如何在不导致服务器宕机的情况下,用 PHP 读取大文件
协作翻译 原文:How to Read Big Files with PHP (Without Killing Your Server) 链接:https://www.sitepoint.com/performant-reading-big-files-php/ 译者:Tocy, Tony, 南宫冰郁, Tot_ziens 作为PHP开发人员,我们并不经常需要担心内存管理。PHP 引擎在我们背后做了很好的清理工作,短期执行上下文的 Web 服务器模型意味着即使是最潦草的代码也不会造成持久的影响。 很少情况下
企鹅号小编
2018/02/11
1.6K0
如何在不导致服务器宕机的情况下,用 PHP 读取大文件
【DB笔试面试599】在Oracle中,如何在不执行SQL的情况下获取执行计划?
♣ 题目部分 在Oracle中,如何在不执行SQL的情况下获取执行计划? ♣ 答案部分 1、“EXPLAIN PLAN FOR SQL”不实际执行SQL语句,生成的计划未必是真实执行的计划。但是,必
AiDBA宝典
2019/09/29
2.4K0
MySQL中字节、编码、长度、值的关系 原
0.一个汉字占多少字节与编码有关:          UTF-8:一个汉字=3个字节             GBK:一个汉字=2个字节  1.varchar(n),char(n)表示n个字符,无论汉字和英文,MySQL都能存入n个字符,仅是实际字节长度有所区别
wuweixiang
2018/08/14
2.6K0
MySQL中字节、编码、长度、值的关系
                                                                            原
知识分享之Golang——在Golang中管道(channel)的使用
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。
cn華少
2022/06/01
8500
使用JPA原生SQL查询在不绑定实体的情况下检索数据
在这篇博客文章中,我将与大家分享我在学习过程中编写的JPA原生SQL查询代码。这段代码演示了如何使用JPA进行数据库查询,而无需将数据绑定到实体对象。通过本文,你将了解如何使用原生SQL查询从数据库中高效地检索数据。
高久峰
2023/08/07
7540
字节二面面试题:如何在不发布代码,不扩容的情况下,快速解决MQ消息堆积的问题
亲爱的读者朋友,今天我将为您带来一个极具挑战性的技术问题,这是一道来自字节跳动的面试题。问题是关于在生产环境中处理消息堆积问题,而不需要发布代码或扩容的情况下,如何迅速解决问题,以确保线上系统的正常运行。
coderidea
2023/10/10
2040
字节二面面试题:如何在不发布代码,不扩容的情况下,快速解决MQ消息堆积的问题
如何在Bash中获取数组长度?
在Bash脚本中,数组是一种常用的数据结构,用于存储多个值。在处理数组时,经常需要知道数组的长度,即数组中元素的个数。本文将详细介绍如何在Bash中获取数组长度的方法,以帮助您更好地处理数组操作。
网络技术联盟站
2023/06/17
1.3K0
如何在Bash中获取数组长度?
DevOps如何在不牺牲安全性的情况下迁移到云端
企业采用DevOps意味着开发进行将比以往任何时候都要快。那么如何确保一切都是安全的,尤其是将业务迁移到云端时? 调研机构Gartner公司预测, 2022年全球云计算服务市场规模和增长率几乎是整体I
CloudBest
2019/09/17
6970
DevOps如何在不牺牲安全性的情况下迁移到云端
字节|字符、字段类型长度
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
Carl feng
2023/04/28
1.7K0
golang在windows下设置GOPATH不生效?
如果GOPATH在系统变量中设置不生效,可以在用户变量中设置就生效了 另外,还如果将bin目录加入到系统环境变量的path中 想要运行多个工程,只需要添加多个GOPATH到用户的环境变量中即可。
槽痞
2020/06/23
2.4K0
使用文件字节输入流FileInputStream读取文件
1.在e盘下创建aaa.txt文件 2.代码 package d01_TestInput;/* * zt * 2020/8/7 * 10:33 * */ import java.io.F
2020/10/23
1.4K0
使用文件字节输入流FileInputStream读取文件
如何在 Python 中读取 .data 文件?
在本文中,我们将学习什么是 .data 文件以及如何在 python 中读取 .data 文件。
很酷的站长
2023/02/22
6K0
如何在 Python 中读取 .data 文件?
如何在Java中逐行读取文件
本文翻译自How to read a file line by line in Java
ccf19881030
2020/11/24
10.5K0
如何在Go中使用切片容量和长度
Run it on the Go Playground → https://play.golang.org/p/7PgUqBdZ6Z
KevinYan
2019/11/18
7120
在C#中ref和out具体怎么使用?在什么情况下使用?
ref是传递参数的地址,out是返回值,两者有一定的相同之处,不过也有不同点。   使用ref前必须对变量赋值,out不用。   out的函数会清空变量,即使变量已经赋值也不行,退出函数时所有out引用的变量都要赋值,ref引用的可以修改,也可以不修改。   区别可以参看下面的代码应该就明白了:
zls365
2020/08/19
2.8K0
C#字符串(字节)的长度
顺便看一下Sql Server中char nchar varchar  nvarchar
aehyok
2018/09/11
5.2K0
C#字符串(字节)的长度
点击加载更多

相似问题

来自net.TCPConn的Golang读取字节数

30

os.File读取方法如何修改golang中的片字节?

12

如何在golang中确定连接的确切字节长度?

175

在golang中基于字节长度的拆分字符串

13

用4个字节作为消息分离从net.TCPConn读取字节

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文