Linux下C語言的socket網路編程

來源:互聯網
上載者:User

標籤:success   local   received   struct   socket   wait   types   資料   out   

Server.c

  1 #include <sys/types.h>  2 #include <sys/socket.h>  3 #include <netinet/in.h>  4 #include <arpa/inet.h>  5 #include <netdb.h>  6 #include <stdio.h>  7 #include <errno.h>  8 #include <stdlib.h>  9 #include <string.h> 10 #include <unistd.h> 11 /************************************************************************************************************************ 12 1、int socket(int family,int type,int protocol) 13 family: 14     指定使用的協議簇:AF_INET(IPv4) AF_INET6(IPv6) AF_LOCAL(UNIX協議) AF_ROUTE(路由通訊端) AF_KEY(秘鑰通訊端) 15 type: 16     指定使用的通訊端的類型:SOCK_STREAM(位元組流通訊端) SOCK_DGRAM 17 protocol: 18     如果通訊端類型不是原始通訊端,那麼這個參數就為0 19 2、int bind(int sockfd, struct sockaddr *myaddr, int addrlen) 20 sockfd: 21     socket函數返回的通訊端描述符 22 myaddr: 23     是指向本地IP地址的結構體指標 24 myaddrlen: 25     結構長度 26 struct sockaddr{ 27     unsigned short sa_family; //通訊協定類型族AF_xx 28     char sa_data[14];  //14位元組協議地址,包含該socket的IP地址和連接埠號碼 29 }; 30 struct sockaddr_in{ 31     short int sin_family; //通訊協定類型族 32     unsigned short int sin_port; //連接埠號碼 33     struct in_addr sin_addr; //IP地址 34     unsigned char si_zero[8];  //填充0以保持與sockaddr結構的長度相同 35 }; 36 3、int connect(int sockfd,const struct sockaddr *serv_addr,socklen_t addrlen) 37 sockfd: 38     socket函數返回通訊端描述符 39 serv_addr: 40     伺服器IP地址結構指標 41 addrlen: 42     結構體指標的長度 43 4、int listen(int sockfd, int backlog) 44 sockfd: 45     socket函數綁定bind後通訊端描述符 46 backlog: 47     設定可串連用戶端的最大串連個數,當有多個用戶端向伺服器請求時,收到此值的影響。預設值20 48 5、int accept(int sockfd,struct sockaddr *cliaddr,socklen_t *addrlen) 49 sockfd: 50     socket函數經過listen後通訊端描述符 51 cliaddr: 52     用戶端通訊端介面地址結構 53 addrlen: 54     用戶端地址結構長度 55 6、int send(int sockfd, const void *msg,int len,int flags) 56 7、int recv(int sockfd, void *buf,int len,unsigned int flags) 57 sockfd: 58     socket函數的通訊端描述符 59 msg: 60     發送資料的指標 61 buf: 62     存放接收資料的緩衝區 63 len: 64     資料的長度,把flags設定為0 65 *************************************************************************************************************************/ 66 int main(int argc, char *argv[]) 67 { 68     int fd, new_fd, struct_len, numbytes,i; 69     struct sockaddr_in server_addr; 70     struct sockaddr_in client_addr; 71     char buff[BUFSIZ]; 72  73     server_addr.sin_family = AF_INET; 74     server_addr.sin_port = htons(8000); 75     server_addr.sin_addr.s_addr = INADDR_ANY; 76     bzero(&(server_addr.sin_zero), 8); 77     struct_len = sizeof(struct sockaddr_in); 78  79     fd = socket(AF_INET, SOCK_STREAM, 0); 80     while(bind(fd, (struct sockaddr *)&server_addr, struct_len) == -1); 81     printf("Bind Success!\n"); 82     while(listen(fd, 10) == -1); 83     printf("Listening....\n"); 84     printf("Ready for Accept,Waitting...\n"); 85     new_fd = accept(fd, (struct sockaddr *)&client_addr, &struct_len); 86     printf("Get the Client."); 87     numbytes = send(new_fd,"Welcome to my server\n",21,0);  88     while((numbytes = recv(new_fd, buff, BUFSIZ, 0)) > 0) 89     { 90         buff[numbytes] = ‘\0‘; 91         printf("%s\n",buff); 92             if(send(new_fd,buff,numbytes,0)<0)   93             {   94                 perror("write");   95                 return 1;   96             }   97     } 98     close(new_fd); 99     close(fd);100     return 0;101 }

Client.c

#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <netdb.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#include <arpa/inet.h>int main(int argc,char *argv[]){    int sockfd,numbytes;    char buf[BUFSIZ];    struct sockaddr_in their_addr;    printf("break!");    while((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1);    printf("We get the sockfd~\n");    their_addr.sin_family = AF_INET;    their_addr.sin_port = htons(8000);    their_addr.sin_addr.s_addr=inet_addr("127.0.0.1");    bzero(&(their_addr.sin_zero), 8);        while(connect(sockfd,(struct sockaddr*)&their_addr,sizeof(struct sockaddr)) == -1);    printf("Get the Server~Cheers!\n");    numbytes = recv(sockfd, buf, BUFSIZ,0);//接收伺服器端資訊      buf[numbytes]=‘\0‘;      printf("%s",buf);    while(1)    {        printf("Entersome thing:");        scanf("%s",buf);        numbytes = send(sockfd, buf, strlen(buf), 0);            numbytes=recv(sockfd,buf,BUFSIZ,0);          buf[numbytes]=‘\0‘;         printf("received:%s\n",buf);      }    close(sockfd);    return 0;}

未完待續~

Linux下C語言的socket網路編程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.