主機的位元組序與網路位元組序
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
h---host 本地主機,to 就是to 了,n ---net 網路的意思,l 是 unsigned long,"s"表示short,"l"表示long
in_addr
與字串的轉換
typedef struct in_addr s_un_b;
struct s_un_w;
ulong s_addr;
} s_un;
#define s_addr s_un.s_addr /* can be used for most tcp & ip code */
#define s_host s_un.s_un_b.s_b2 // host on imp
#define s_net s_un.s_un_b.s_b1 // network
#define s_imp s_un.s_un_w.s_w2 // imp
#define s_impno s_un.s_un_b.s_b4 // imp #
#define s_lh s_un.s_un_b.s_b3 // logical host
} in_addr, *pin_addr, far *lpin_addr;
typedef struct sockaddr_in sockaddr_in, *psockaddr_in;
unsigned long wsaapi inet_addr(__in in const char far * cp );
char far *wsaapi inet_ntoa( in struct in_addr in);
inet_addr函式需要乙個字串作為其引數,該字串指定了以點分十進位制格式表示的ip位址(例如:192.168.0.16)。而且inet_addr函式會返回乙個適合分配給s_addr的u_long型別的數值。
inet_ntoa函式會完成相反的轉換,它接受乙個in_addr結構體型別的引數並返回乙個以點分十進位制格式表示的ip位址字串。
獲取本地ip 引入
ws2_32.lib
void initwinsock()}}
string getlocalip()
}strlocalip = buf;
return strlocalip;}
獲取子網掩碼
再引入iphlpapi.lib
std::string getmaskfromip(const std::string &ip)
if (no_error == getadaptersinfo(padapterinfo, &uloutbuflen))
// 在這裡迴圈可以獲取所有網絡卡資訊
padapter = padapter->next;
} }
if (padapterinfo)
return ret;
}
獲取廣播位址 /*
演算法:
1. 子網掩碼與ip位址進行位與運算,得處網路位址
2. 網路位址 | (~子網掩碼),得出廣播位址*/
string getbroadcastip(string strip,string strnetmask)
Windows網路程式設計
1.先總結一些會用到的知識 中計算機都分配乙個位址,該位址是乙個 32位的數值表示 客戶端和伺服器通訊的時候需要指定乙個 ip位址 和埠。ip位址 一般是用 internet標準 點分表示法 像a.b.c.d 一樣指定 的,每乙個字母代表乙個位元組的數字 十進位制 八進位制 或十六進製制 從左到右分...
windows網路程式設計
winsock是windows系統下利用socket套接字進行網路程式設計的相關函式,是windows下的網路程式設計介面。winsock在常見的windows平台上有兩個主要的版本,即winsock1和winsock2。編寫與winsock1相容的程式你需要引用標頭檔案winsock.h,如果編寫...
windows網路程式設計
include include include 要使用winsock api,就要包含ws2 32.lib這個庫 pragma comment lib,ws2 32.lib int main int argc,char ar 為埠號賦值 short port if port atoi ar 1 0 ...