2016-01-02 192 views
-2

我目前正试图通过基于TCP/IP的套接字与外部应用程序进行通信。我已成功建立与客户端的连接并收到一些数据。本说明书here指出接收到该命令通过套接字发送NULL数据

之后,客户端必须读取来自后台程序的确认 八位字节。肯定确认是一个零位的八位位组。否定确认是任何其他模式的八位字节。

我想发出一个积极的确认和我送它这样 从here

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

WriteData("00000000"); 

我的问题是,如果我corectly发送此数据(八位获得我的服务器监听代码零位)?

更新:

我看了这个帖子here 这是发送状态只允许发送一个char *数组。所以我不知道如何通过套接字发送一个字节。我知道我可以做这样的事情

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

但我不知道如何通过套接字发送。

+2

不知道为什么投反对票或接近 –

+0

' “00000000”是一个8个字符的字符串,不是报价。 –

+0

“00000000”是一个八字符的字符串,后跟一个空字节。不是零位的八位字节。 – EJP

回答

2

尝试

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

使用功能,甚至:

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

直接发送。


WriteData("00000000"); 

实际上将发送48 [十进制] 8个字节(假设你的平台是ASCII,所有现代的系统可以兼容)。

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

有糅合在一起用C字和字节,可以追溯到C的最早的天,是相当多的出炉概念之间(混合在一起)++。

+1

似乎是第二种方法做到了这一点,而WriteData( “\ 0”)'不起作用 – MistyD

+0

@MistyD,傻傻的我。当然它没有。 'std :: string'的构造函数会将null看作终止符。现在修复。 – Persixty

+1

现代平台是[UTF-8](http://utf8everywhere.org)而不是ASCII –