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

時間 2021-10-14 21:29:01

1樓:匿名使用者

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

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

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

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. 繫結套接字

bind(socketsrc, (sockaddr*)&addsrc, sizeof(sockaddr));

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

第二個引數:通過一個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. 接受連線:

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

socket socketconn = accept(socketsrc, (sockaddr*)&addclient, &len);

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

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

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

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

recv(socketconn, recvbuf, 100, 0);

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

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

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

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

客戶端的編寫

6. 首先也是建立套接字

7. 然後在建立連線

connect(sockclient, (sockaddr*)&addsrc, sizeof(sockaddr));

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

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

他是基於無連線的協議

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

同過 recvfrom和sendto函式來操作

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

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

2樓:匿名使用者

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

滿分求助,如何用VB或者C用Socket傳送資料庫返回資料集

這個還真沒弄過,不過分析一下,既然文本性的資料無問題,那邏輯就應該沒什麼問題 如果將rs資料集以另一種形式傳遞可能會有效 什麼形式就得你自己揣摩了,我也不太清楚了 再乙個 補充一下 給客戶端傳送的只能是文字 要不然都得轉換成byte傳送 你試試能否轉換成byte 要是傳資料集 完全 可以轉換成文字檔...

C 中類怎樣定義,使用,C 中如果要用的類定義在使用之後,該怎樣宣告?

類的定義格式一般地分為說明部分和實現部分。說明部分是用來說明該類中的成員,包含資料成員的說明和成員函式的說明。成員函式是用來對資料成員進行操作的,又稱為 方法 實現部分是用來對成員函式的定義。概括說來,說明部分將告訴使用者 幹什麼 而實現部分是告訴使用者 怎麼幹 類的一般定義格式如下 class 類...

C怎麼將類作為引數傳遞,python怎麼向類中的函式傳遞引數

千鋒教育 public static void getresult person p public class person public string b 個人覺得有很多種方法 1 用object類 class abc public string msg public object data 2 ...