c如何使用 socket 類向 http 伺服器傳送數

時間 2021-10-14 21:28:53

1樓:匿名使用者

socket程式設計首先要包含所需的標頭檔案winsock2.h並工程中新增庫檔案ws2_32.lib.

接著載入套接字型檔所用函式是

第一個引數代表的是所要載入的套接字型檔的版本,第二個引數用於儲存返回的版本資訊

wversionrequested = makeword( 1, 1 );用makeword來設定版本號的值其中地位代表主版本號

tcp程式設計:

伺服器端的編寫:

1. 建立套接字

socket socketsrc = socket(af_inet, sock_stream, 0);

第一個引數:指定地址族在1.1版本中只能使用af_inet

第二個引數:指定套接字的型別在1.1版本中指定指定兩種一sock_stream流式套接字和sock_dream資料包套接字

第三個引數:指示所要使用的的協議,如果為0則自動選擇合適的協議(推薦)

2. 繫結套接字

第一個引數:一個未繫結的的套接字

第二個引數:通過一個sockaddr結構體將一個地址分配給套接字

第三個引數:第二個引數的大小長度

sockaddr結構體: struct sockaddr_in ;

第一個成員:sin_family地址族(這個引數不使用網路位元組序列,其他引數都是網路位元組序列)

第二個成員:sin_port指定要繫結的埠使用htons來轉換成網路位元組序列因為是無符號短整型

第三個成員:in_addr的結構體用來存放地址in_addr的結構如下

struct in_addr s_un;

};可以看出in_addr是一個包含一個聯合體的結構體,聯合體可以用來存放不同型別的資料但只存放一個資料,根據選擇不同而不同,我們的程式中選擇的是長整型的變數s_addr來存放一個地址需用htonl來轉換成為網路位元組序;

l htonl和htons區別是在於一個是將一個32位的主機位元組序列轉換成32位的tcp/ip的網路位元組序一個則是16位

l inet_addr的用處是將一個點分制的ip地址字串轉換為一個合適的 in_addr的變數。

l inet_ntoa將一個網路地址轉換為標準的點分式地址格式的字串

3. 監聽套接字:

listen(socketsrc, 5); //listen用於將一個已繫結但未連線的套接字物件設定成監聽模式等 到一個即將到來的連線

第二個引數:表示等待連線的最大長度,如果引數被設定為somaxconn將被設成一個最大的可能值

4. 接受連線:

在一個被設定為監聽的套接字上允許一個連線,並返回一個已連線的新的套接字

第一個引數:一個被設定為監聽狀態的套接字;

第二個引數:一個sockaddr結構體用於儲存請求連線的實體的地址,根據地址族的不同所建立的結構體不一樣

第三個引數:儲存地址的長度,此引數在呼叫accept函式前必須初始化,否則會導致呼叫失敗

5. 完成以上工作後通過recv和send函式來接收和傳送資料

recv(socketconn, recvbuf, 100, 0);

第一個引數是一個已連線的套接字

第二個引數是用來儲存接收的資料的緩衝區地址

第三個參數列示緩衝區的大小

第四個引數指示接收的模式此處設為0

客戶端的編寫

6. 首先也是建立套接字

7. 然後在建立連線

第二個引數是要連線的地址,第三個引數則是地址的大小

udp程式設計部分在簡單的多執行緒聊天室的編寫中詳細說明

他是基於無連線的協議

所以編寫伺服器端時只要繫結了套接字後就可以開始傳送和接受資料,而客戶端則只需建立套接字就可以開始傳送和接收

同過 recvfrom和sendto函式來操作

使用closesocket(m_socket);關閉一個套接字,使用wsacleanup();來釋放套接字型檔

希望對你有幫助呵呵 這是在vc下的

2樓:匿名使用者

客戶端傳送請求給伺服器,伺服器處理完畢以後把socket tempsocket = (你還可以檢測收到的1w8資料是3w8裡面的哪一部分. 這個把傳送的資料和接收的

C中如何使用SerialPort控制元件向微控制器傳送資料

其實很簡單,設定幾個引數即可,下面是我寫的從串列埠讀取ds18b20發回溫度的例子。namespace 串列埠通訊 private void form1 load object sender,eventargs e private void timer1 tick object sender,eve...

在C中,如何使用sql語句向資料庫中新增資訊

禹仙居安然 正常情況下,sql server中能實現的語句在c 中aqlcommand中執行是沒有問題,我們做開發的時候一般是sql server中先驗證查詢語句沒問題了才往c 中新增。您這裡導致這種情況的可能是 c 中字串的拼裝需要注意的一些問題,你可以在執行sqlcommand的 處斷點,然後檢...

C如何定義類型別的陣列,C 中如何定義類的陣列,以及給他們賦值?

student 學生物件的陣列 liststu new list 學生物件的集合 c 中自定義類陣列和結構陣列的使用 發現很多時候給定的陣列要實現某個邏輯或處理很是麻煩,一維陣列,二維陣列,等等需要經過n多轉換,還不如自己寫一個自定義陣列,既方便又節省時間,以下是類陣列,其實相當於定義了一個實體類一...