gpt4 book ai didi

c++ - 通过套接字发送的内容的数据类型是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:43:27 25 4
gpt4 key购买 nike

当使用 Berkeley socket api 时,通过 read/send 或 write/recv 调用发送的内容的数据类型是什么?例如-

char *msg = "Our Message!";
int len, bytes_sent;
len = strlen(msg);
bytes_sent = send(sockfd, msg, len, 0);

在这段代码中,我们使用的是 char 类型,但我们是否仅限于 char 类型,因为 send/write/sendto 通常采用 void * 类型。我也看到过一些争论,比如如果我们发送一些 int,它实际上可能存储在小端/大端中,如果它们的端序不匹配,就会导致 b/w source/dest 问题。那为什么char类型也没有这个问题呢?

C 和 C++ 等不同的语言也有不同大小的 char,那为什么这不是问题呢?如果 socket 不关心任何 type 并且只将内容视为缓冲区,那么当不同的 tcp 服务器/客户端以不同的语言编写并相互通信时,为什么我们看不到数据的随机损坏?

简而言之,我可以通过套接字安全地发送什么值(类型)?

最佳答案

您不能安全地通过原始套接字发送任何内容并期望接收方理解它。例如,发送进程可能在字符编码为 EBCDIC 的机器上,而接收进程可能在字符编码为 ASCII 的机器上。这取决于流程协商协议(protocol)来解决这个问题,或者简单地在他们的规范中说“我们正在使用 ASCII(或其他)”。

一旦您确定了字符编码,我的建议就是以文本形式传输数据。这避免了所有端序问题,并且更易于调试和记录。

关于c++ - 通过套接字发送的内容的数据类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42602541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com