[英]C++ sending string over socket
我正在做一個小型的客戶端/服務器項目,作為C ++課程中的最終項目。 我們得到了一些負責通信的類(使用sys / socket.h),我們基本上可以執行connection->send(byte)
來發送一個字節的數據。
說我有一個要發送的字符串。 當從客戶端發送到服務器時,如何確保將“ a”解釋為“ a”,反之亦然? 由於標准沒有說關於默認設置為unsigned或signed的char,所以我不知道如何處理它。
我有一個想法,我可以在每一端減去std::numeric_limits<char>::min()
,但是我不確定這是一個好方法。
TCP和UDP都不關心字符串的編碼。 它將始終被解釋為字節數組。 因此,要確保正確解釋您的字符串,服務器和客戶端都必須就通用編碼達成共識。
在您的情況下,我將僅使用std :: string的c_str()
方法來發送字符串並通過將接收到的數據解釋為const char*
(對於ASCII字符串)來分配字符串。 只要客戶端應用程序和服務器應用程序使用相同的字符串庫,它就應該起作用。
要驗證您的通信,您應該使用網絡嗅探器。 Wireshark是一個很好的人。
如果嗅探器捕獲到您的以太網數據包並說它有一個“ a”,則可以確定您發送了一個“ a”。
以我的經驗,當您發送類似於以下內容的字符串時:
string myString = "Hello World";
mySocket.send(myString.c_str(), myString.length());
如果我使用(char *)或(unsigned char *)對myString.c_str()進行強制轉換,則結果相同。
一個字節總是8位:)
問候
其他想知道的是CPU的字節序,大於1個字節的類型可能是一個問題。 嘗試將big endian作為標准,因為這是大多數常見網絡協議的標准。
最好的祝福。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.