通过套接字发送NULL数据

时间:2016-01-02 08:15:10

标签: linux sockets c++11

我目前正在尝试通过基于TCP / IP的套接字与外部应用程序进行通信。我已经成功建立了与客户端的连接并收到了一些数据。本手册here说明了

  

收到此命令后,客户端必须读取确认   来自守护进程的八位字节。肯定确认是零比特的八位字节。否定确认是任何其他模式的八位字节。

我想发送一个肯定的确认,我就是这样发送的 我的服务器监听代码是从here

获得的
void WriteData(std::string content)
{
    send(newsockfd,content.c_str(),content.length(),0);
}

WriteData("00000000");

我的问题是,我是否正在以核心方式发送此数据(八位八位)?

更新

我已阅读此帖here 表明发送只允许发送char *数组。所以我不确定如何通过套接字发送一个字节。我知道我可以做这样的事情

std::bitset<8> b1 ;  // [0,0,0,0,0,0,0,0]

但我不确定如何通过套接字发送它。

1 个答案:

答案 0 :(得分:2)

尝试

WriteData(std::string("\0",1));

使用您的功能甚至:

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

直接发送。

WriteData("00000000");

实际上会发送8个八位字节的48 [十进制](假设您的平台是ASCII,所有现代系统都兼容)。

但是\0是字符串文字中用来表示空字符(即零八位字节)的转义序列。

在C ++中,在字符和字节的概念之间存在一种混淆(混合在一起),这些概念可以追溯到C的最早期,并且几乎已经完成了。