linux下網路編程學習——入門執行個體ZZ

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   color   os   sp   for   

http://www.cppblog.com/cuijixin/archive/2008/03/14/44480.html是不是還對用c怎麼實現網路編程感到神秘莫測阿,我們這裡就要撕開它神秘的面紗,呵呵。

一起來:

誒,不要著急,我們先來介紹一些網路程式的主要執行過程,主要是便於大家更好的理解下面的程式執行個體哦 :

1)系統啟動伺服器執行。伺服器完成一些初始化操作,然後進入睡眠狀態,等待客戶機請求。
2)在網路的某台機器上,使用者執行客戶機程式
3)客戶機進行與伺服器處理序建立一條串連
4)串連建立後,客戶機通過網路向伺服器發出請求,請求某種服務。
5)伺服器接收到客戶機的請求後,根據客戶機請求的內容進行相應的處理,然後將處理結果返回。
6)伺服器斷開與客戶機的串連,繼續睡眠,等待其他客戶機的請求。

現在介紹一個執行個體

功能:實現簡單的伺服器-客戶機編程,客戶機發送串連請求後接受到串連成功資訊。
程式碼封裝括兩部分,伺服器部分(service.c)和客戶機部分(client.c)



 1 /*service.c*/ 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <errno.h> 5 #include <string.h> 6 #include <sys/types.h> 7 #include <netinet/in.h> 8 #include <sys/socket.h> 9 #include <sys/wait.h>10 #define MYPORT 3490 /*開放的連接埠號碼*/11 #define BACKLOG 5  /*指定通訊端可以接受的最大未接受客戶機請求的數目*/12 main()13 {14 int sockfd,new_fd;15 struct sockaddr_in srvaddr;16 struct sockaddr_in cliaddr;17 int sin_size;18 /*建立通訊端描述符*/19 if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)20 {21       perror("socket error");22       exit(1);23 }24 bzero(&srvaddr,sizeof(srvaddr));25 /*用自己的ip地址和連接埠資訊填充一個internet通訊端地址結構*/26 srvaddr.sin_family=AF_INET;                 27 srvaddr.sin_port=htons(MYPORT);28 /*函數bind將伺服器的地址和通訊端幫定在一起*/29 if(bind(sockfd,(struct sockaddr *)&srvaddr,sizeof(struct sockaddr))==-1)30 {31       perror("bind error");32       exit(1);33 }34 /*listen函數告訴核心,這個通訊端可以接受來自客戶機的請求*/35 if(listen(sockfd,BACKLOG)==-1)36 {37       perror("listen error");38       exit(1);39 }40 /*處理客戶機的請求,調用函數accept來獲得一個客戶機的串連*/41 for(;;)42 {43       sin_size=sizeof(struct sockaddr_in);44       if((new_fd=accept(sockfd,(struct sockaddr *)&cliaddr,&sin_size))==-1)45       {46              perror("accept error");47              continue;48       }49       printf("server: got connection from %s \n",inet_ntoa(cliaddr.sin_addr));50 /*向客戶起寫資料*/51       if(write(new_fd,"Hello,Network!\n",14)==-1)52                     perror("write error!");53       close(new_fd);54 }55       close(sockfd);56 }

 


下面為client:
 1 /*client.c*/ 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <errno.h> 5 #include <string.h> 6 #include <netdb.h> 7 #include <sys/types.h> 8 #include <netinet/in.h> 9 #include <sys/socket.h>10 #define PORT 349011 #define MAXDATASIZE 500012 int main(int argc,char **argv)13 {14 int sockfd,nbytes;15 char buf[1024];16 struct hostent *he;17 struct sockaddr_in srvaddr;18 if(argc!=2)19 {20 perror("Usage:client hostname\n");21 exit(1);22 }23 /*函數gethostbyname獲得指定網域名稱地址所對應的ip地址*/24 if((he=gethostbyname(argv[1]))==NULL)25 {26       perror("gethostbyname");27       exit(1);28 }29 /*建立通訊端,返回通訊端描述符*/30 if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)31 {32       perror("create socket error");33       exit(1);34 }35 bzero(&srvaddr,sizeof(srvaddr));36 /*用獲得的遠程伺服器處理序的ip地址和連接埠號碼來填充一個internet通訊端地址結構*/37 srvaddr.sin_family=AF_INET;38 srvaddr.sin_port=htons(PORT);39 srvaddr.sin_addr=*((struct in_addr *)he->h_addr);40 /*用connect於這個遠程伺服器建立一個internet串連*/41 if(connect(sockfd,(struct sockaddr *)&srvaddr,sizeof(struct sockaddr))==-1)42 {43       perror("connect error");44       exit(1);45 }46 /*調用read函數讀取伺服器write過來的資訊*/47 if((nbytes=read(sockfd,buf,MAXDATASIZE))==-1)48 {49       perror("read error");50       exit(1);51 }52 buf[nbytes]=‘\0‘;53 printf("read: %s",buf);54 close(sockfd);55 }

 







下面我們來編譯執行看看效果哦

編譯:
#gcc -o service service.c
#gcc -o client client.c
修改執行許可權
#chmod 770 service
#chmod 770 client
執行
現執行伺服器端哦
#./service
另開一個命令列視窗,串連伺服器的3490連接埠
#./client localhost
呵呵,看到效果了吧
伺服器端:

server: got connection from 127.0.0.1

用戶端

read: Hello,Network!

linux下網路編程學習——入門執行個體ZZ

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.