遍匈 / socket園殻 /

socket利大忖准會參式寄極會弌極會

<貧匯准 和匯准>
音揖CPU嶄?4忖准屁方1壓坪贋腎寂議贋刈圭塀頁音揖議。4忖准屁方1辛喘2序崙燕幣泌和?

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亅咏氏徭強廬算葎利大忖准會?音俶勣壅距喘屢哘議痕方。
<貧匯准 和匯准>

AltStyle によって変換されたページ (->オリジナル) /