前言:網絡編程就是編寫程序使兩臺聯網的計算機相互交換數據。
例子:服務器端開啓一個socket,監聽9999端口。客戶端向服務器端發起請求,服務器端收到請求以後,給客戶端發送一句:"hello world";
服務器端:
step1:調用socket函數創建套接字。
step2:調用bind函數分配ip和端口號。
step3:調用listen函數轉爲可接受請求狀態。
step4:調用accept函數受理連接請求。
1#include2#include3#include5#include6#include78usingnamespacestd;910intmain()11 {12intserv_sock = socket(PF_INET,
SOCK_STREAM,0);13if(serv_sock == -1) {14cout<<"socket() error"<< endl;15return0;16 }1718 sockaddr_in serv_addr;19serv_addr.sin_family = AF_INET;20serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");21serv_addr.sin_port =
htons(9999);2223if(bind(serv_sock, (sockaddr*) &serv_addr,sizeof(serv_addr)) == -1) {24cout<<"bind() error"<< endl;25 close(serv_sock);26return0;27 }2829if(listen(serv_sock,5) == -1) {30cout<<"listen() error"<< endl;31 close(serv_sock);32return0;33
}3435 sockaddr_in clnt_addr;36socklen_t clnt_add_size =sizeof(clnt_addr);37cout<<"start listen"<< endl;38intclnt_sock = accept(serv_sock, (sockaddr*) &clnt_addr, &clnt_add_size);39if(clnt_sock == -1) {40cout<<"accept() error"<< endl;41
close(clnt_sock);42 close(serv_sock);43return0;44 }4546stringmessage ="hello world";47 write(clnt_sock, message.c_str(), message.size());4849 close(clnt_sock);50 close(serv_sock);5152return0;53}
客戶端:
step1:調用socket函數創建套接字。
step2:調用connect函數想服務器端發送連接請求。
1#include2#include3#include5#include6#include78usingnamespacestd;910intmain()11 {12intclnt_sock = socket(PF_INET, SOCK_STREAM,0);13if(clnt_sock == -1) {14cout<<"socket() error"<< endl;15return0;16 }1718 sockaddr_in
serv_addr;19serv_addr.sin_family = AF_INET;20serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");21serv_addr.sin_port = htons(9999);2223if(connect(clnt_sock, (sockaddr*) &serv_addr,sizeof(serv_addr)) == -1) {24cout<<"connect() error"<< endl;25
close(clnt_sock);26return0;27 }2829charmessage[100];30intstr_len = read(clnt_sock, message,sizeof(message)-1);31if(str_len == -1) {32cout<<"read failed"<< endl;33 close(clnt_sock);34return0;35 }3637cout<< message << endl;38 close(clnt_sock);39return0;40}
示例中用到了write和read函數,linux中一切都被看作文件,所以套接字也可以像操作文件一樣去操作。