2016-01-02 191 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 –