0
我正嘗試在c中使用openssl編寫Apple Push Notification Server提供程序(APNS提供程序)。openssl ssl_read發送讀取二進制數據到char *
到目前爲止,我已經能夠通過ssl_write成功發送通知,但有時候會發生,我發送的消息被拒絕(無論出於何種原因,壞的令牌等)。當發生這種情況,我嘗試ssl_write,我得到-1字節寫入,然後APNS應該發回錯誤消息並關閉連接。
的錯誤出現在二進制和蘋果文檔在這裏描述的是由6個字節:Apple Documenatation
const int written= SSL_write(this->_ssl, buffer, bufferSize);
int want =SSL_want(this->_ssl);
if(want == 2){ //2 means that ssl wants to read
char bufferRead[6];
SSL_read(this->_ssl,bufferRead,6);
//Some code that transfers bufferRead into a ASCII format
}
我要問你,我怎麼轉換這個二進制bufferRead到的東西,我可以讀取和存儲在允許說char *或std :: string。轉換後的輸出應該看起來像這樣「881234」...
我很感激任何幫助,我可以得到。由伊蘭
編輯解決方案:
unsigned char command = bufferRead[0];
unsigned char status = bufferRead[1];
unsigned char c2 = bufferRead[2];
unsigned char c3 = bufferRead[3];
unsigned char c4 = bufferRead[4];
unsigned char c5 = bufferRead[5];
int comInt = command;
int statusInt = status;
int id = (c5 << 24) +
(c4 << 16) +
(c3 << 8) +
(c2);
您好,感謝快速回答。我也嘗試用各種方式解析緩衝區,但它似乎不起作用。用你的解決方案,如果我用std :: cout打印出命令,狀態,id,前兩個不打印任何東西,id是8個數字(67108864)。我也積極地認爲ssl_read返回值爲6的int。 – Malisak
@Malisak你如何打印前兩個?如果你正在打印'char'變量,你不會看到任何東西,因爲ASCII值8是不可打印的字符。也許你應該把它轉換爲int。至於id,你期望的價值是什麼?該ID應該是您之前發送給Apple的消息的ID(您是創建該ID的人)。另外,你確定你正在管理讀取6個字節嗎? – Eran
好的,我已經鑄造了第一個兩個變量到int,它的工作,現在都按預期打印8。至於id,我以前已經設置爲1234。構建ssl_write的消息格式的方法與前面提到的APNS文檔中的方法幾乎相同。 Ssl_read返回6,實際上是從TLS/SSL連接讀取的字節數。我試圖做strlen(bufferRead),它顯示4 ...這很奇怪。 – Malisak