Winsock程式設計筆記 1

2021-10-13 04:50:56 字數 2825 閱讀 7387

tcp/ip統一規定使用大尾方式傳輸資料,即網路位元組序

intel/amd的計算機一般都是小尾方式儲存資料

所以當計算機想通過網路傳輸一串資料給另一台計算機時, 都會經歷如下過程的轉換

1. inet_addr是把由小數點分割的ip位址字串轉成由32位二進位制表示的網路位元組序ip位址

ip字串 => 32位網路位元組序ip

原型如下:

2. inet_ntoa是把32位二進位制表示的網路位元組序ip位址轉成由小數點分割的ip位址字串,是inet_addr的逆過程

32位網路位元組序ip=> ip字串

原型如下:

這四個函式用於主機位元組序和網路位元組序之間的相互轉換

h代表主機位元組序即小尾方式

n代表網路位元組序即大尾方式

to代表轉換

s代表short,即16位(x86)

l代表long,即32位(x86)

舉乙個例子, htons。根據上面, 意思就是把16位的主機位元組序轉成網路位元組序

除winsock外需要包含如下標頭檔案:

#include #pragma comment(lib, "iphlpapi")

bool

getmacandotherinfo()

; tchar szipaddr[16] = ;

tchar szsubnetmask[32] = ;

tchar szgateway[16] = ;

struct in_addr stip = ;

bool fok = false;

do if (null != pstadapterinfo)

// 獲取子網掩碼, 這裡其實沒必要進行這一步轉換,只是為了演示inet_addr和inet_ntoa的用法

stip.s_un.s_addr = inet_addr(pstadapterinfo->ipaddresslist.ipmask.string);

memcpy(szsubnetmask, inet_ntoa(stip), sizeof(szsubnetmask));

// 獲取閘道器位址

stip.s_un.s_addr = inet_addr(pstadapterinfo->gatewaylist.ipaddress.string);

memcpy(szgateway, inet_ntoa(stip), sizeof(szgateway));

_tprintf(text("ip: %s\nmac: %02x-%02x-%02x-%02x-%02x-%02x\nsubnet mask: %s\ngateway: %s\n\n"),

szipaddr, szmacaddr[0], szmacaddr[1], szmacaddr[2], szmacaddr[3], szmacaddr[4],

szmacaddr[5], szsubnetmask, szgateway);

pstadapterinfo = pstadapterinfo->next;

}fok = true;

} } while (false);

return(fok);

}

其中主要使用了getadaptersinfo函式,來看一下原型:

看一下ip_adapter_info結構:

一般基於tcp的winsock程式設計,其特點是可靠,面向連線的協議,流程如下:

winsock2提供了wsasocket來建立套接字,其引數更多。

如果程式不關心所使用的位址可以直接指定inaddr_any並指定埠為0。則程式執行時系統會為應用程式分配乙個1024~5000之間的唯一埠號

注意listen函式只用在支援連線的套接字上,如果監聽套接字數量已經到達上限,呼叫wsagetlasterror()會獲得wsaeconnrefused錯誤

例子可以檢視: tcp/udp套接字程式設計實現

(完)

Winsock程式設計入門 1

一 簡單的tcp伺服器 介紹 winsock api是一套供microsoft windows作業系統使用的套接字程式庫,它最初基於berkeley套接字,但是其中加入了一些microsoft的特殊改動。在這篇文章中,我要試著給你介紹如何使用winsock來進行套接字程式設計,並假設你沒有在任何作業...

Winsock程式設計基礎1

1 載入和釋放winsoke庫 所有winsock函式都是從ws2 32.dll匯出,包含相應庫檔案 include pragma comment lib,ws2 32 若沒有載入,呼叫scok函式返回的socket error出錯 為wsanotinitialised intwsastartup ...

WinSock網路程式設計基礎(1)

記錄學習windows網路程式設計過程中遇到的問題和相關筆記 socket起源於unix,socket是應用層與tcp ip協議族通訊的中間軟體抽象層,它是一組介面。基於 開啟 讀 寫 關閉 模式,其中winsock就是變種之一 以下是乙個典型的c s中使用套接字介面的概述 winsock是wind...