C/C++網絡編程——linux實現

前言:網絡編程就是編寫程序使兩臺聯網的計算機相互交換數據。

 例子:服務器端開啓一個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中一切都被看作文件,所以套接字也可以像操作文件一樣去操作。

如果你想要更多的資料和素材請關注我的主頁或者加入我的企鵝圈哦!!