c++ - 通过套接字从 Linux 向 Windows 机器发送空字节 - 会相同吗

标签 c++ linux windows sockets

这是基于我之前问过的question。目前,我正在通过套接字从 Linux 机器向 Linux 发送一个零位的八位字节

const char null_data(0);
send(newsockfd,&null_data,1,0);

我的问题是发送到 Windows 机器(64 位)时会是一样的吗? 或者我必须更改代码吗?

最佳答案

这里的技巧是在可行的情况下使用 uint*_t 数据类型:

#include <cstdint>

/* ... */

#if !defined(__WIN64)
// *nix variant
typedef int socket_fd_t;
#else
// WinXX socket descriptor data type.
typedef SOCKET socket_fd_t;
#endif

void send_0_byte(socket_fd_t newsockfd)
{
    uint8_t zero_byte(0);
    send(newsockfd, &zero_byte, 1, 0);
}

您可能想要添加一些错误检查代码,包括正确的平台套接字 header 。 uint8_t 根据定义是一个 8 位数量(八位字节),它满足您的要求并避免潜在的 char 大小问题。

在接收端,您想要recvuint8_t缓冲区。

关于c++ - 通过套接字从 Linux 向 Windows 机器发送空字节 - 会相同吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34623522/

相关文章:

c++ - 无法从文本文件中读取

c++ - C++11 线程如何包裹 pthreads

c++ - 为什么我收到错误: “there is more than one default constructor” ?

python - 执行类似 ./program_name 的程序

linux - 如何在 nullmailer 1.0.5 中启用安全身份验证(ssl、tls、starttls)。并将 nullmailer 升级到 1.11

java - 在大多数(如果不是全部)Linux 发行版上以 root 权限重新启动 jar

windows - 单实例批处理文件?

java - 转义文件路径中的空格

c# - 任何应用程序内的插入位置/位置

c++ - 结合组合RNG?带分布的 std::xor_combine 模板?