遍匈 / socket園殻 /

聞喘bind()才connect()痕方

<貧匯准 和匯准>
socket() 痕方喘栖幹秀耗俊忖?鳩協耗俊忖議光嶽奉來?隼朔捲暦匂極勣喘 bind() 痕方繍耗俊忖嚥蒙協議IP仇峽才極笥鰯協軟栖?峪嗤宸劔?送将乎IP仇峽才極笥議方象嘉嬬住公耗俊忖侃尖?遇人薩極勣喘 connect() 痕方秀羨銭俊。

bind() 痕方

bind() 痕方議圻侏葎?
int bind(int sock, struct sockaddr *addr, socklen_t addrlen); //Linux
int bind(SOCKET sock, const struct sockaddr *addr, int addrlen); //Windows
和中參Linux葎箭序佩讐盾?Windows嚥緩窃貌。
sock 葎 socket 猟周宙峰憲?addr 葎 sockaddr 潤更悶延楚議峺寞?addrlen 葎 addr 延楚議寄弌?辛喇 sizeof() 柴麻誼竃。

和中議旗鷹?繍幹秀議耗俊忖嚥IP仇峽 127.0.0.1、極笥 1234 鰯協?
//幹秀耗俊忖
int serv_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
//幹秀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); //極笥
//繍耗俊忖才IP、極笥鰯協
bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
宸戦厘断聞喘 sockaddr_in 潤更悶?隼朔壅膿崙廬算葎 sockaddr 窃侏?朔円氏讐盾葎焚担宸劔恂。

sockaddr_in 潤更悶

俊和栖音形枠心匯和 sockaddr_in 潤更悶?万議撹埀延楚泌和?
struct sockaddr_in{
 sa_family_t sin_family; //仇峽怛?Address Family??匆祥頁仇峽窃侏
 uint16_t sin_port; //16了議極笥催
 struct in_addr sin_addr; //32了IP仇峽
 char sin_zero[8]; //音聞喘?匯違喘0野割
};
1) sin_family 才 socket() 議及匯倖歌方議根吶屢揖?函峙匆勣隠隔匯崑。

2) sin_prot 葎極笥催。uint16_t 議海業葎曾倖忖准?尖胎貧極笥催議函峙袈律葎 0~65536?徽 0~1023 議極笥匯違喇狼由蛍塘公蒙協議捲暦殻會?箭泌 Web 捲暦議極笥催葎 80?FTP 捲暦議極笥催葎 21?侭參厘断議殻會勣勝楚壓 1024~65536 岻寂蛍塘極笥催。

極笥催俶勣喘 htons() 痕方廬算?朔中氏讐盾葎焚担。

3) sin_addr 頁 struct in_addr 潤更悶窃侏議延楚?和中氏峋聾讐盾。

4) sin_zero[8] 頁謹噫議8倖忖准?短嗤喘?匯違聞喘 memset() 痕方野割葎 0。貧中議旗鷹嶄?枠喘 memset() 繍潤更悶議畠何忖准野割葎 0?壅公念3倖撹埀験峙?複和議 sin_zero 徭隼祥頁 0 阻。

in_addr 潤更悶

sockaddr_in 議及3倖撹埀頁 in_addr 窃侏議潤更悶?乎潤更悶峪淫根匯倖撹埀?泌和侭幣?
struct in_addr{
 in_addr_t s_addr; //32了議IP仇峽
};
in_addr_t 壓遊猟周 <netinet/in.h> 嶄協吶?吉勺噐 unsigned long?海業葎4倖忖准。匆祥頁傍?s_addr 頁匯倖屁方?遇IP仇峽頁匯倖忖憲堪?侭參俶勣 inet_addr() 痕方序佩廬算?箭泌?
unsigned long ip = inet_addr("127.0.0.1");
printf("%ld\n", ip);
塰佩潤惚?
16777343

夕盾 sockaddr_in 潤更悶

葎焚担勣吾宸担鹸墫?潤更悶嶄廼耗潤更悶?遇音喘 sockaddr_in 議匯倖撹埀延楚栖峺苧IP仇峽椿?socket() 痕方議及匯倖歌方厮将峺苧阻仇峽窃侏?葎焚担壓 sockaddr_in 潤更悶嶄珊勣壅傍苧匯肝椿?宸音頁?ĝ詑陦?

宸乂訓末議聾准鳩糞公兜僥宀揮栖阻匯協議嬾悪?厘??宸賜俯頁煽雰圻咀杏?朔中議俊笥悳勣惹否念中議旗鷹。光了響宀匯協勣嗤塚伉?壙扮音尖盾短嗤購狼?功象縮殻嶄議旗鷹“孚竪鮫拶”軸辛?扮寂消阻徭隼氏俊鞭。

葎焚担聞喘 sockaddr_in 遇音聞喘 sockaddr

bind() 及屈倖歌方議窃侏葎 sockaddr?遇旗鷹嶄抜聞喘 sockaddr_in?隼朔壅膿崙廬算葎 sockaddr?宸頁葎焚担椿?

sockaddr 潤更悶議協吶泌和?
struct sockaddr{
 sa_family_t sin_family; //仇峽怛?Address Family??匆祥頁仇峽窃侏
 char sa_data[14]; //IP仇峽才極笥催
};
和夕頁 sockaddr 嚥 sockaddr_in 議斤曳?凄催嶄議方忖燕幣侭媼喘議忖准方??


sockaddr 才 sockaddr_in 議海業屢揖?脅頁16忖准?峪頁繍IP仇峽才極笥催栽旺欺匯軟?喘匯倖撹埀 sa_data 燕幣。勣?公 sa_data 験峙?駅倬揖扮峺苧IP仇峽才極笥催?箭泌”127.0.0.1:80“?凖唆議頁?短嗤屢購痕方繍宸倖忖憲堪廬算撹俶勣議侘塀?匆祥載佃公 sockaddr 窃侏議延楚験峙?侭參聞喘 sockaddr_in 栖旗紋。宸曾倖潤更悶議海業屢揖?膿崙廬算窃侏扮音氏卿払忖准?匆短嗤謹噫議忖准。

辛參範葎?sockaddr 頁匯嶽宥喘議潤更悶?辛參喘栖隠贋謹嶽窃侏議IP仇峽才極笥催?遇 sockaddr_in 頁廨壇喘栖隠贋 IPv4 仇峽議潤更悶。総翌珊嗤 sockaddr_in6?喘栖隠贋 IPv6 仇峽?万議協吶泌和?
struct sockaddr_in6 { 
 sa_family_t sin6_family; //(2)仇峽窃侏?函峙葎AF_INET6
 in_port_t sin6_port; //(2)16了極笥催
 uint32_t sin6_flowinfo; //(4)IPv6送佚連
 struct in6_addr sin6_addr; //(4)醤悶議IPv6仇峽
 uint32_t sin6_scope_id; //(4)俊笥袈律ID
};
屎頁喇噐宥喘潤更悶 sockaddr 聞喘音宴?嘉寞斤音揖議仇峽窃侏協吶阻音揖議潤更悶。

connect() 痕方

connect() 痕方喘栖秀羨銭俊?万議圻侏葎?
int connect(int sock, struct sockaddr *serv_addr, socklen_t addrlen); //Linux
int connect(SOCKET sock, const struct sockaddr *serv_addr, int addrlen); //Windows
光倖歌方議傍苧才 bind() 屢揖?音壅弩峰。
<貧匯准 和匯准>

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