如何使用C 傳送網路資料

2021-06-21 12:28:22 字數 1303 閱讀 6876

步驟如下:

1. 新建乙個超大的 char *p 陣列...大到足夠容納你所需要的資料為止

2. 將每乙個string的內容放到這個 p陣列裡面.

比如: 如果是 std::string , 就 strcpy(p,str.c_str());

如果是 std::wstring ,就 memcpy(p,str.c_str(),str.size()*2)

或者先轉化為 std::string ,再按std::string處理...

如果是 char* 的字串,就直接strcpy,

如果是 wchar_t*的字串,按 std::wstring 處理.

如果是其他,如 cstring , 分 unicode 和 非unicode ,按上面說的處理.

解碼的時候很簡單,就直接定義乙個 std::string str;

然後 str= p;//假設是接收到的資料. 然後str就是第乙個字串.

接著p的指標增加str的長度個單位,即 p+=str.size();

接著繼續解釋第二個字串.

當然,對於 unicode 版本的字串解釋,則複雜一些...

另外,上面提及的是不考慮位元組順序的.

如果是需要考慮位元組順序的,請參考下面的 int 處理方式.

3. 將 int 整數放到 p 裡面.

如果不需要考慮位元組順序(即:假設通訊雙方都是windows系統),可以直接認為是char*處理.

如: int i=10; memcpy(p,&i,sizeof(i)); 即可.

如果是需要考慮直接順序,則需要對這個int進行一定的編碼,保證對方可以還原出這個數字出來.

最簡單的就是按位元組處理.

如: int i=10; 

p[0] = (char)((i >>24)&0xff);//提取i的最高8位

p[1] = (char)((i >>16)&0xff);

p[2] = (char)((i >>8)&0xff);

p[3] = (char)((i >>0)&0xff);//提取i的最低8位

然後對方解碼的時候也按照這個規則解碼即可.

---------------

反正這個東西,說複雜其實不太複雜,說簡單也不算簡單.

關鍵是制定一種規則,使接收的一方可以還原出資料即可.至於這種規則是什麼,由你自己決定,沒什麼標準. 

這個就叫通訊協議.

如果你只是說純粹要傳送出去,不管對方能不能識別,那沒有意義.

----------------

另外,我記得網上應該有一些已經封裝好的類,不過我記不起叫什麼名字了,可以自己找一下.

資料如何傳送

資料從主機進入線路這段旅程,需要經過以下幾個環節 1 應用程式首先將要傳送的資料寫入該程序的記憶體位址空間中,通常在程式開發中這只需要一般的執行時變數賦值即可。2 應用程式通過系統函式庫介面 比如send函式 向核心發出函式呼叫,由系統核心來進行隨後的操作,它將這些資料從使用者態記憶體區複製到核心維...

pyhon網路程式設計使用tcp傳送 接收資料

1 建立套接字 2 繫結本地埠 客戶端也就可以不繫結,不繫結時系統隨機開啟乙個埠 3 連線伺服器位址 4 傳送或接收伺服器資料 5 關閉套接字 tcp傳送資料例項 import socket 定義伺服器連線函式 def tcpclient to sever tcp soctet tcp soctet...

如何在C 使用CDO元件傳送郵件

個人有用c 傳送郵件的需求,網上搜尋了一下,倒是有某些牛人編寫的應用smtp協議程式設計實現的傳送郵件類,但 規模太大,比我自己的主程式還大,就算了 知道應用cdo元件可以傳送郵件,在autoit 中應用過,直接呼叫cdo元件傳送郵件,簡單方便,但網路上並沒有使用c 呼叫cdo元件的源 參考了網路搜...