gpt4 book ai didi

c++ - 发送整数数组 (winsock)

转载 作者:行者123 更新时间:2023-11-30 01:17:52 25 4
gpt4 key购买 nike

我正在编写一个客户端/服务器程序,我需要使用函数 send(SOCKET s, const char *buf, int len, int flags); 将信息从客户端发送到服务器;但显然这个函数是用来表示一个字符串,字符数组,但我发送的是加密消息,字符值很大,字符类型不够。

还有其他功能可以让我这样做吗?我在微软网站上查看了引用资料,但没有得到其他功能。

如果还有其他功能,我希望您能告诉我如何操作或给我提示,或者如果有其他方法可以做到这一点。

注意:我在 Windows 8 下使用 C++,使用 Borland 6

最佳答案

这可能很难解释。

您的问题不在于您正在使用的功能,而在于您尝试应用的概念。

首先,如果您的数据打算通过网络传输,您必须假设目标端点字节顺序可能与传输端点不同。

考虑到这一点,建议在传输任何数据之前将符合字节顺序的数据类型解释转换为网络字节顺序。查看 htons()、htonl()、ntohs() 和 ntohl() 函数。

由于您必须处理已知的数据大小,而不是将数组声明为 int[],您应该通过 stdint.h 类型声明它,例如 int16_t、int32_t、uint16_t 等。

那么,假设您有以下内容:

uint32_t a[4] = { 1, 2, 3, 4 };

如果你想以可移植的方式传输这个数组,你应该首先将它的内容转换为网络字节序:

uint32_t a_converted[4];

for (int i = 0; i < sizeof(a); i ++)
a_converted[i] = htonl(a[i]);

现在,如果你想传输这个数组,你可以使用:

send(s, (char *) a_converted, sizeof(a_converted), flags);

请记住,接收此数据的代码应将其从网络字节顺序转换为主机字节顺序,在这种情况下,对接收到的每个元素使用 ntohl()。

希望这能为您提供一些进一步研究的线索。

关于c++ - 发送整数数组 (winsock),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23451182/

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