遍匈 / socket園殻 /

匯倖酒汽議Linux和議socket殻會

<貧匯准 和匯准>
才C囂冱縮殻匯劔?厘断貫匯倖酒汽議“Hello World!”殻會俳秘 socket 園殻。

云准處幣阻 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
|

屎械秤趨和?殻會塰佩欺 accept() 痕方祥氏瓜怦毘?吉棋人薩極窟軟萩箔。

俊和栖園咎 client.cpp 旺塰佩?

[admin@localhost ~]$ g++ client.cpp -o client
[admin@localhost ~]$ ./client
Message form server: Hello World!
[admin@localhost ~]$

client 塰佩朔?宥狛 connect() 痕方? server 窟軟萩箔?侃噐酌油彜蓑議 server 瓜爾試?峇佩 accept() 痕方?俊鞭人薩極議萩箔?隼朔峇佩 write() 痕方? client 勧指方象。client 俊辺欺勧指議方象朔?connect() 祥塰佩潤崩阻?隼朔聞喘 read() 繍方象響函竃栖。

俶勣廣吭議頁?
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() 貫耗俊忖猟周嶄響函方象。
<貧匯准 和匯准>

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