1樓:彼岸ly花開
ck2.h並工程中新增庫檔案ws2_32.lib.
接著載入套接字型檔所用函式是
第一個引數代表的是所要載入的套接字型檔的版本,第
wversionrequested = makeword( 1, 1 );用makeword來設定版本號的值其中地位代表主版本號
tcp程式設計:
伺服器端的編寫:
1. 建立套接字
socket socketsrc = socket(af_i***, sock_stream, 0);
第一個引數:指定地址族在1.1版本中只能使用af_i***
第二個引數:指定套接字的型別在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 i***_addr的用處是將一個點分制的ip地址字串轉換為一個合適的 in_addr的變數。
l i***_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();來釋放套接字型檔
c語言是從本程式的main函式開始到main函式結束嗎
c語言程式的執行過程是這樣的,但是程式就不是這樣了 在一個c語言程式的執行是從 a 本程式的main函式開始,到main函式結束。b 從main函式開始到main函式結束。答案選a。c語言常考考點 1 一個c語言源程式可以由一個或多個原始檔組成。2 每個原始檔可由一個或多個函式組成。3 一個源程式不...
C怎麼在成員函式裡呼叫指向成員函式的函式指標
1.一個bai指向外部函式的指du針宣告 zhi為 void pf char constchar void strcpy char dest,constchar source pf strcpy 2.一個dao指向類a成員回 函式的指標宣告為 答 void a pmf char constchar ...
在C程式中呼叫被C編譯器編譯後的函式,為什麼要加extern「C」宣告
簡單來說就是 函式和變數被c 編譯後在符號庫中的名字與c語言的不同,被extern c 修飾的變數和函式是按照c語言方式編譯和連線的。由於編譯後的名字不同,c 程式不能直接呼叫c 函式。c 提供了一個c 連線交換指定符號extern c 來解決這個問題。總之,重點就是c 裡面支援函式的過載,因此編譯...