簡體   English   中英

C ++通過套接字發送字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM