socket利大忖准會參式寄極會弌極會
<貧匯准
和匯准>
音揖CPU嶄?4忖准屁方1壓坪贋腎寂議贋刈圭塀頁音揖議。4忖准屁方1辛喘2序崙燕幣泌和?
叙鴇宙峰載佃盾瞥賠萱?音形栖心匯倖糞箭。邪譜壓 0x20 催蝕兵議仇峽嶄隠贋4忖准 int 侏方象 0x12345678?寄極會CPU隠贋圭塀泌和夕侭幣?
夕1?屁方 0x12345678 議寄極會忖准燕幣
斤噐寄極會?恷互了忖准 0x12 贋慧欺詰了仇峽?恷詰了忖准 0x78 贋慧欺互了仇峽。弌極會議隠贋圭塀泌和夕侭幣?
夕2?屁方 0x12345678 議弌極會忖准燕幣
音揖CPU隠贋才盾裂方象議圭塀音揖?麼送議Intel狼双CPU葎弌極會??弌極會狼由才寄極會狼由宥佚扮氏窟伏方象盾裂危列。咀緩壓窟僕方象念?勣繍方象廬算葎由匯議鯉塀——利大忖准會?Network Byte Order?。利大忖准會由匯葎寄極會。
麼字A枠委方象廬算撹寄極會壅序佩利大勧補?麼字B辺欺方象朔枠廬算葎徭失議鯉塀壅盾裂。
械需議利大忖准廬算痕方嗤?
宥械?參
訟箭傍苧貧峰痕方議距喘狛殻?
Host ordered port: 0x1234
Network ordered port: 0x3412
Host ordered address: 0x12345678
Network ordered address: 0x78563412
総翌俶勣傍苧議頁?sockaddr_in 嶄隠贋IP仇峽議撹埀葎32了屁方?遇厘断母呂議頁泣蛍噴序崙燕幣隈?箭泌 127.0.0.1?万頁匯倖忖憲堪?咀緩葎阻蛍塘IP仇峽?俶勣繍忖憲堪廬算葎4忖准屁方。
inet_addr() 痕方辛參頼撹宸嶽廬算。inet_addr() 茅阻繍忖憲堪廬算葎32了屁方?揖扮珊序佩利大忖准會廬算。萩心和中議旗鷹?
Network ordered integer addr: 0x4030201
Error occured!
貫塰佩潤惚辛參心竃?inet_addr() 音叙辛參委IP仇峽廬算葎32了屁方?珊辛參殊霞涙丼IP仇峽。
廣吭?葎 sockaddr_in 撹埀験峙扮俶勣?塋週惱?濵臗崕斟鰈Ĺ士ę璿舸崕斟鬘ii?┨? write()/send() 窟僕方象扮TCP亅咏氏徭強廬算葎利大忖准會?音俶勣壅距喘屢哘議痕方。
00000000 00000000 00000000 00000001
嗤乂CPU參貧中議乏會贋刈欺坪贋?総翌匯乂CPU夸參宜會贋刈?泌和侭幣?00000001 00000000 00000000 00000000
飛音深打宸乂祥辺窟方象氏窟伏諒籾?咀葎隠贋乏會議音揖吭龍彭斤俊辺方象議盾裂乏會匆音揖。寄極會才弌極會
CPU?坪贋隠贋方象議圭塀嗤曾嶽?- 寄極會?Big Endian??互了忖准贋慧欺詰了仇峽?互了忖准壓念?。
- 弌極會?Little Endian??互了忖准贋慧欺互了仇峽?詰了忖准壓念?。
叙鴇宙峰載佃盾瞥賠萱?音形栖心匯倖糞箭。邪譜壓 0x20 催蝕兵議仇峽嶄隠贋4忖准 int 侏方象 0x12345678?寄極會CPU隠贋圭塀泌和夕侭幣?
夕1?屁方 0x12345678 議寄極會忖准燕幣
斤噐寄極會?恷互了忖准 0x12 贋慧欺詰了仇峽?恷詰了忖准 0x78 贋慧欺互了仇峽。弌極會議隠贋圭塀泌和夕侭幣?
夕2?屁方 0x12345678 議弌極會忖准燕幣
音揖CPU隠贋才盾裂方象議圭塀音揖?麼送議Intel狼双CPU葎弌極會??弌極會狼由才寄極會狼由宥佚扮氏窟伏方象盾裂危列。咀緩壓窟僕方象念?勣繍方象廬算葎由匯議鯉塀——利大忖准會?Network Byte Order?。利大忖准會由匯葎寄極會。
麼字A枠委方象廬算撹寄極會壅序佩利大勧補?麼字B辺欺方象朔枠廬算葎徭失議鯉塀壅盾裂。
利大忖准會廬算痕方
壓ゞ聞喘bind()才connect()痕方〃匯准嶄讐盾阻 sockaddr_in 潤更悶?凪嶄祥喘欺阻利大忖准會廬算痕方?泌和侭幣?
//幹秀sockaddr_in潤更悶延楚
struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr)); //耽倖忖准脅喘0野割
serv_addr.sin_family = AF_INET; //聞喘IPv4仇峽
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); //醤悶議IP仇峽
serv_addr.sin_port = htons(1234); //極笥催
htons() 喘栖繍輝念麼字忖准會廬算葎利大忖准會?凪嶄h旗燕麼字?host?忖准會?n旗燕利大?network?忖准會?s旗燕short?htons 頁 h、to、n、s 議怏栽?辛參尖盾葎”繍short侏方象貫輝念麼字忖准會廬算葎利大忖准會“。械需議利大忖准廬算痕方嗤?
- htons()?host to network short?繍short窃侏方象貫麼字忖准會廬算葎利大忖准會。
- ntohs()?network to host short?繍short窃侏方象貫利大忖准會廬算葎麼字忖准會。
- htonl()?host to network long?繍long窃侏方象貫麼字忖准會廬算葎利大忖准會。
- ntohl()?network to host long?繍long窃侏方象貫利大忖准會廬算葎麼字忖准會。
宥械?參
s葎朔弸議痕方嶄?s旗燕2倖忖准short?咀緩喘噐極笥催廬算?參l葎朔弸議痕方嶄?l旗燕4倖忖准議long?咀緩喘噐IP仇峽廬算。訟箭傍苧貧峰痕方議距喘狛殻?
#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
int main(){
unsigned short host_port = 0x1234, net_port;
unsigned long host_addr = 0x12345678, net_addr;
net_port = htons(host_port);
net_addr = htonl(host_addr);
printf("Host ordered port: %#x\n", host_port);
printf("Network ordered port: %#x\n", net_port);
printf("Host ordered address: %#lx\n", host_addr);
printf("Network ordered address: %#lx\n", net_addr);
system("pause");
return 0;
}
塰佩潤惚?Host ordered port: 0x1234
Network ordered port: 0x3412
Host ordered address: 0x12345678
Network ordered address: 0x78563412
総翌俶勣傍苧議頁?sockaddr_in 嶄隠贋IP仇峽議撹埀葎32了屁方?遇厘断母呂議頁泣蛍噴序崙燕幣隈?箭泌 127.0.0.1?万頁匯倖忖憲堪?咀緩葎阻蛍塘IP仇峽?俶勣繍忖憲堪廬算葎4忖准屁方。
inet_addr() 痕方辛參頼撹宸嶽廬算。inet_addr() 茅阻繍忖憲堪廬算葎32了屁方?揖扮珊序佩利大忖准會廬算。萩心和中議旗鷹?
#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
int main(){
char *addr1 = "1.2.3.4";
char *addr2 = "1.2.3.256";
unsigned long conv_addr = inet_addr(addr1);
if(conv_addr == INADDR_NONE){
puts("Error occured!");
}else{
printf("Network ordered integer addr: %#lx\n", conv_addr);
}
conv_addr = inet_addr(addr2);
if(conv_addr == INADDR_NONE){
puts("Error occured!");
}else{
printf("Network ordered integer addr: %#lx\n", conv_addr);
}
system("pause");
return 0;
}
塰佩潤惚?Network ordered integer addr: 0x4030201
Error occured!
貫塰佩潤惚辛參心竃?inet_addr() 音叙辛參委IP仇峽廬算葎32了屁方?珊辛參殊霞涙丼IP仇峽。
廣吭?葎 sockaddr_in 撹埀験峙扮俶勣?塋週惱?濵臗崕斟鰈Ĺ士ę璿舸崕斟鬘ii?┨? write()/send() 窟僕方象扮TCP亅咏氏徭強廬算葎利大忖准會?音俶勣壅距喘屢哘議痕方。
<貧匯准
和匯准>