Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 当数据通过网络发送时,将字符串转换为字节,然后将字节转换为字符串是否更好?为什么?_Sockets - Fatal编程技术网

Sockets 当数据通过网络发送时,将字符串转换为字节,然后将字节转换为字符串是否更好?为什么?

Sockets 当数据通过网络发送时,将字符串转换为字节,然后将字节转换为字符串是否更好?为什么?,sockets,Sockets,我对socket编程很感兴趣,我看到一些源代码在数据通过网络发送之前将数据转换成字节,当它接收到数据时将数据转换回它的第一个形状! 为什么会这样?发送字节而不是字符串或数据本身更好还是更快? 我真的很困惑,因为我没有在网上找到足够的信息,或者这是一个网络的东西,如果是这样的话,如果你能把我链接到一个主题,我将不胜感激, 很抱歉,我的语言有限,因为我不是本地人,感谢高级的套接字传输原始字节序列。除此之外,他们什么都不做 因此,如果您有更高级别的构造(int、struct、string等),则必须将

我对socket编程很感兴趣,我看到一些源代码在数据通过网络发送之前将数据转换成字节,当它接收到数据时将数据转换回它的第一个形状! 为什么会这样?发送字节而不是字符串或数据本身更好还是更快? 我真的很困惑,因为我没有在网上找到足够的信息,或者这是一个网络的东西,如果是这样的话,如果你能把我链接到一个主题,我将不胜感激,
很抱歉,我的语言有限,因为我不是本地人,感谢高级的

套接字传输原始字节序列。除此之外,他们什么都不做


因此,如果您有更高级别的构造(int、struct、string等),则必须将它们“编码”为一系列可以传输的字节,然后在另一端对它们进行“解码”。

数据必须序列化为单个字节,因为套接字(如文件句柄)是字节流,字符串是对象。你不能把圆钉子插进方孔里。您可以将字符串序列化为看起来像字符串文字的内容,但实际上,所有字符串在内存中或通过网络或文件流传输时都有编码。通常,通过网络发送的字符串以UTF-8编码,对于ASCII字符,UTF-8看起来就像是代表每个字符的字节序列。但任何字节值大于127的字符实际上都将使用超过1个字节来表示该字符。所以一切都必须序列化。即使是整数也有一个编码。一个4字节的整数可以被序列化为一个4字节的流,其顺序是从最低有效字节到最高有效字节(这称为“小尾端”)或相反方向(“大尾端”)。

Oh!我现在理解了转换背后的原因以及转换的必要性,谢谢您的帮助。请注意,按照惯例,“Big-Endian”应该用作“网络字节顺序”。供参考:非常感谢,我知道了big endian和little endian的区别,但是其中一个比另一个好吗?如果是,为什么?或者,这只是一个字节顺序,就像我们要把鸡蛋裂成哪一面,大的一面还是小的一面!重要的是双方都同意整数的endianness。虽然如果您正在设计一个协议,我会使用big-endian,这样当您查看原始十六进制(也称为“在线”)时,字节序列读起来就像一个文本。这意味着大端数字3的4字节编码在电线上看起来像00000003,而在小端数字中看起来像03000000,更难“看到”。是的,听起来可以理解,不认为套接字只处理字节,我有多跛:P,无论如何,谢谢你的帮助:)那么为什么套接字传输原始字节序列而不是字符串呢?我不知道将数据从客户端发送到服务器端的背后是什么,希望您能给出一些解释离网络越近,离硬件越近。为了简化硬件的实现,它通常仅以字节为单位工作。