匯倖酒汽議Linux和議socket殻會
<貧匯准
和匯准>
才C囂冱縮殻匯劔?厘断貫匯倖酒汽議“Hello World!”殻會俳秘 socket 園殻。
云准處幣阻 Linux 和議旗鷹?server.cpp 頁捲暦匂極旗鷹?client.cpp 頁人薩極旗鷹?勣糞孖議孔嬬頁?人薩極貫捲暦匂響函匯倖忖憲堪旺嬉咫竃栖。
捲暦匂極旗鷹 server.cpp?
人薩極旗鷹 client.cpp?
枠園咎 server.cpp 旺塰佩?
俊和栖園咎 client.cpp 旺塰佩?
俶勣廣吭議頁?
1) server 峪俊鞭匯肝 client 萩箔?輝 server ? client 勧指方象朔?殻會祥塰佩潤崩阻。泌惚?壅肝俊辺欺捲暦匂議方象?駅倬壅肝塰佩 server?侭參宸頁匯倖掲械酒捉議 socket 殻會?音嬬校匯岷俊鞭人薩極議萩箔。
2) 貧中議坿猟周朔弸葎
及11佩宥狛 socket() 痕方幹秀阻匯倖耗俊忖?歌方 AF_INET 燕幣聞喘 IPv4 仇峽?SOCK_STREAM 燕幣聞喘中?銭俊議方象勧補圭塀?IPPROTO_TCP 燕幣聞喘 TCP 亅咏。壓 Linux 嶄?socket 匆頁匯嶽猟周?嗤猟周宙峰憲?辛參聞喘 write() / read() 痕方序佩 I/O 荷恬。
及19佩宥狛 bind() 痕方繍耗俊忖 serv_sock 嚥蒙協議IP仇峽才極笥鰯協?IP仇峽才極笥脅隠贋壓 sockaddr_in 潤更悶嶄。
socket() 痕方鳩協阻耗俊忖議光嶽奉來?bind() 痕方斑耗俊忖嚥蒙協議IP仇峽才極笥斤哘軟栖?宸劔人薩極嘉嬬銭俊欺乎耗俊忖。
及22佩斑耗俊忖侃噐瓜強酌油彜蓑。侭僚瓜強酌油?頁峺耗俊忖匯岷侃噐“鋒蓄”嶄?岷欺人薩極窟軟萩箔嘉氏瓜“蚕佰”。
及27佩議 accept() 痕方喘栖俊辺人薩極議萩箔。殻會匯稀峇佩欺 accept() 祥氏瓜怦毘?壙唯塰佩??岷欺人薩極窟軟萩箔。
及31佩議 write() 痕方喘栖?耗俊忖猟周嶄亟秘方象?匆祥頁?人薩極窟僕方象。
才噸宥猟周匯劔?socket 壓聞喘頼穎朔匆勣喘 close() 購液。
2) 壅傍匯和 client.cpp 嶄議旗鷹。client.cpp 嶄議旗鷹才 server.cpp 嶄嗤匯乂曝艶。
及19佩旗鷹宥狛 connect() ?捲暦匂窟軟萩箔?捲暦匂議IP仇峽才極笥催隠贋壓 sockaddr_in 潤更悶嶄。岷欺捲暦匂勧指方象朔?connect() 嘉塰佩潤崩。
及23佩旗鷹宥狛 read() 貫耗俊忖猟周嶄響函方象。
云准處幣阻 Linux 和議旗鷹?server.cpp 頁捲暦匂極旗鷹?client.cpp 頁人薩極旗鷹?勣糞孖議孔嬬頁?人薩極貫捲暦匂響函匯倖忖憲堪旺嬉咫竃栖。
捲暦匂極旗鷹 server.cpp?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(){
//幹秀耗俊忖
int serv_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
//繍耗俊忖才IP、極笥鰯協
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); //極笥
bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
//序秘酌油彜蓑?吉棋喘薩窟軟萩箔
listen(serv_sock, 20);
//俊辺人薩極萩箔
struct sockaddr_in clnt_addr;
socklen_t clnt_addr_size = sizeof(clnt_addr);
int clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
//?人薩極窟僕方象
char str[] = "Hello World!";
write(clnt_sock, str, sizeof(str));
//購液耗俊忖
close(clnt_sock);
close(serv_sock);
return 0;
}
人薩極旗鷹 client.cpp?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
int main(){
//幹秀耗俊忖
int sock = socket(AF_INET, SOCK_STREAM, 0);
//?捲暦匂?蒙協議IP才極笥?窟軟萩箔
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); //極笥
connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
//響函捲暦匂勧指議方象
char buffer[40];
read(sock, buffer, sizeof(buffer)-1);
printf("Message form server: %s\n", buffer);
//購液耗俊忖
close(sock);
return 0;
}
枠園咎 server.cpp 旺塰佩?
[admin@localhost ~]$ g++ server.cpp -o server
[admin@localhost ~]$ ./server
|
俊和栖園咎 client.cpp 旺塰佩?
[admin@localhost ~]$ g++ client.cpp -o client
[admin@localhost ~]$ ./client
Message form server: Hello World!
[admin@localhost ~]$
俶勣廣吭議頁?
1) server 峪俊鞭匯肝 client 萩箔?輝 server ? client 勧指方象朔?殻會祥塰佩潤崩阻。泌惚?壅肝俊辺欺捲暦匂議方象?駅倬壅肝塰佩 server?侭參宸頁匯倖掲械酒捉議 socket 殻會?音嬬校匯岷俊鞭人薩極議萩箔。
2) 貧中議坿猟周朔弸葎
.cpp?頁C++旗鷹?侭參勣喘g++凋綜栖園咎。
C++才C囂冱議匯倖嶷勣曝艶頁?壓C囂冱嶄?延楚駅倬壓痕方議蝕遊協吶?遇壓C++嶄?延楚辛參壓痕方議販採仇圭協吶?聞喘厚紗痩試。宸戦岻侭參聞喘C++旗鷹?頁音錬李壓痕方蝕遊均迩狛謹延楚。
坿鷹盾裂
1) 枠傍匯和 server.cpp 嶄議旗鷹。及11佩宥狛 socket() 痕方幹秀阻匯倖耗俊忖?歌方 AF_INET 燕幣聞喘 IPv4 仇峽?SOCK_STREAM 燕幣聞喘中?銭俊議方象勧補圭塀?IPPROTO_TCP 燕幣聞喘 TCP 亅咏。壓 Linux 嶄?socket 匆頁匯嶽猟周?嗤猟周宙峰憲?辛參聞喘 write() / read() 痕方序佩 I/O 荷恬。
及19佩宥狛 bind() 痕方繍耗俊忖 serv_sock 嚥蒙協議IP仇峽才極笥鰯協?IP仇峽才極笥脅隠贋壓 sockaddr_in 潤更悶嶄。
socket() 痕方鳩協阻耗俊忖議光嶽奉來?bind() 痕方斑耗俊忖嚥蒙協議IP仇峽才極笥斤哘軟栖?宸劔人薩極嘉嬬銭俊欺乎耗俊忖。
及22佩斑耗俊忖侃噐瓜強酌油彜蓑。侭僚瓜強酌油?頁峺耗俊忖匯岷侃噐“鋒蓄”嶄?岷欺人薩極窟軟萩箔嘉氏瓜“蚕佰”。
及27佩議 accept() 痕方喘栖俊辺人薩極議萩箔。殻會匯稀峇佩欺 accept() 祥氏瓜怦毘?壙唯塰佩??岷欺人薩極窟軟萩箔。
及31佩議 write() 痕方喘栖?耗俊忖猟周嶄亟秘方象?匆祥頁?人薩極窟僕方象。
才噸宥猟周匯劔?socket 壓聞喘頼穎朔匆勣喘 close() 購液。
2) 壅傍匯和 client.cpp 嶄議旗鷹。client.cpp 嶄議旗鷹才 server.cpp 嶄嗤匯乂曝艶。
及19佩旗鷹宥狛 connect() ?捲暦匂窟軟萩箔?捲暦匂議IP仇峽才極笥催隠贋壓 sockaddr_in 潤更悶嶄。岷欺捲暦匂勧指方象朔?connect() 嘉塰佩潤崩。
及23佩旗鷹宥狛 read() 貫耗俊忖猟周嶄響函方象。
<貧匯准
和匯准>