Linux socket學習

來源:互聯網
上載者:User

標籤:

 1 //伺服器端 server.c 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<errno.h> 6 #include<sys/types.h> 7 #include<sys/socket.h> 8 #include<netinet/in.h> 9 #define MAXLINE 409610 11 //socket(int domain, int type, int protocol)12 //         協議域      socket類型    指定協議13 int main(int argc, char **argv)14 {15     int n, listenfd, connfd;16     struct sockaddr_in servaddr;17     char buff[MAXLINE];18     if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1 )19     {20         printf("create socket error:%s(error:%d)\n",strerror(errno),errno);21         exit(0);22     }23     memset(&servaddr, 0, sizeof(servaddr));24     servaddr.sin_family = AF_INET;25     servaddr.sin_addr.s_addr = htonl(INADDR_ANY); //系統綁定預設的網卡即IP地址26     servaddr.sin_port = htons(6666); //監聽原生6666號連接埠27 28     if( bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1)29     { //把一個地址族中的特定地址賦給socket30         printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno);31         exit(0);32     }33     if( listen(listenfd, 10) == -1)34     { //調用listen()監聽socket35         printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno);36         exit(0);37     }38     printf("waiting for client‘s request...\n");39     while(1)40     {41         if( (connfd = accept(listenfd, (struct sockaddr*)NULL, NULL)) == -1)42         { //調用accept()函數取接收請求,串連建立好43             printf("accept socket error: %s(errno: %d)",strerror(errno),errno);44             continue;45         }46         n = recv(connfd, buff, MAXLINE, 0); //recv函數返回其實際copy的位元組數47         buff[n] = ‘\0‘;48         printf("recv msg from client: %s\n", buff);49         close(connfd);50     }51     close(listenfd);52 }
 1 //用戶端 client.c 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<errno.h> 6 #include<sys/types.h> 7 #include<sys/socket.h> 8 #include<netinet/in.h> 9 #define MAXLINE 409610 11 int main(int argc, char** argv)12 {13     int  n, sockfd;14     char recvline[MAXLINE], sendline[MAXLINE];15     struct sockaddr_in servaddr;16     if( argc != 2)17     {18         printf("usage: ./client <ipaddress>\n");19         exit(0);20     }21     if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)22     {23         printf("create socket error: %s(errno: %d)\n", strerror(errno),errno);24         exit(0);25     }26     memset(&servaddr, 0, sizeof(servaddr));27     servaddr.sin_family = AF_INET;28     servaddr.sin_port = htons(6666);29 30     if( inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)31     { //IP地址轉換函式32         printf("inet_pton error for %s\n",argv[1]);33         exit(0);34     }35     if( connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0)36     { //調用connect()發出串連請求37         printf("connect error: %s(errno: %d)\n",strerror(errno),errno);38         exit(0);39     }40     printf("send msg to server: \n");41     fgets(sendline, 4096, stdin);42     if( send(sockfd, sendline, strlen(sendline), 0) < 0)43     {44         printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);45         exit(0);46     }47     close(sockfd);48     exit(0);49 }

分別用gcc編譯好後執行,開2個終端:

Linux 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.