zoukankan      html  css  js  c++  java
  • [001]socket通信--server和client实现迭代的简单例子

    server端:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 #include<unistd.h>
     5 #include<arpa/inet.h>
     6 #include<sys/socket.h>
     7 
     8 #define BUFF_SIZE 1024
     9 void error_handling(char* message);
    10 
    11 void error_handling(char* message) {
    12     fputs(message, stderr);
    13     fputc('
    ', stderr);
    14     exit(1);
    15 }
    16 
    17 int main(int argc, char **argv)
    18 {
    19     int serv_sock;
    20      int clnt_sock;
    21     char message[BUFF_SIZE];
    22     int i,str_len;
    23 
    24     //设置一个server地址serv_addr,client地址clnt_addr
    25     struct sockaddr_in serv_addr;
    26     struct sockaddr_in clnt_addr;
    27     socklen_t clnt_addr_size = sizeof(clnt_addr);
    28 
    29     memset(&serv_addr, 0, sizeof(serv_addr));
    30     memset(&serv_addr, 0, sizeof(serv_addr));
    31 
    32     if (argc != 2) {
    33         printf("Usage : %s <port>
    ", argv[0]);
    34         exit(1);
    35     }
    36 
    37     //创建用于internet的流协议(TCP)socket
    38     serv_sock = socket(PF_INET, SOCK_STREAM, 0);
    39     if (serv_sock == -1) {
    40         error_handling("socket() error");
    41     }
    42  
    43     serv_addr.sin_family = AF_INET;
    44     serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    45     serv_addr.sin_port = htons(atoi(argv[1]));
    46 
    47     //把socket和socket地址结构联系起来
    48     if( bind(serv_sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr)) == -1) {
    49         error_handling("bind() error");
    50     }
    51 
    52     //server_socket用于监听
    53     if ( listen(serv_sock, 5) == -1) {
    54         error_handling("lisen() error");
    55     }
    56 
    57     // 受理连接请求
    58     for (i = 0; i < 5; i++) {
    59         clnt_sock = accept(serv_sock,(struct sockaddr*)&clnt_addr,&clnt_addr_size);
    60         if ( clnt_sock == -1) {
    61             error_handling("accept() error");
    62         } else {
    63             printf("connected client %d 
    ", i+1);
    64         }
    65 
    66         while((str_len = read(clnt_sock, message, BUFF_SIZE)) != 0) {
    67             write(clnt_sock, message, str_len);
    68         }
    69 
    70         close(clnt_sock);
    71     }
    72     close(serv_sock);
    73 
    74     return 0;
    75 }

    client端:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 #include<unistd.h>
     5 #include<arpa/inet.h>
     6 #include<sys/socket.h>
     7 
     8 #define BUFF_SIZE 1024
     9 void error_handling(char* message);
    10 
    11 void error_handling(char* message) {
    12     fputs(message, stderr);
    13     fputc('
    ', stderr);
    14     exit(1);
    15 }
    16 
    17 int main(int argc, char **argv) {
    18     int sock;
    19     struct sockaddr_in serv_addr;
    20     char message[BUFF_SIZE];
    21     int str_len;
    22     memset(&serv_addr, 0, sizeof(serv_addr));
    23 
    24     if (argc != 3)
    25     {
    26         printf("Usage: /%s <IP> <Port>
    ",argv[0]);
    27         exit(1);
    28     }
    29 
    30     //创建用于internet的流协议(TCP)socket
    31     sock = socket(PF_INET, SOCK_STREAM, 0);
    32     if (sock == -1) {
    33         error_handling("socket() error");
    34     }
    35 
    36     //设置一个socket地址结构client_addr,代表客户机internet地址, 端口
    37     serv_addr.sin_family = AF_INET;
    38     serv_addr.sin_addr.s_addr = inet_addr(argv[1]);
    39     serv_addr.sin_port = htons(atoi(argv[2]));
    40 
    41     //把socket和socket地址结构联系起来
    42     if( connect(sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr)) == -1) {
    43         error_handling("connect() error");
    44     } else {
    45         printf("connected.......
    ");
    46     }
    47 
    48     while(1) {
    49         fputs("Input mesage(Q to quit) : ", stdout);
    50         fgets(message, BUFF_SIZE, stdin);
    51 
    52         if (!strcmp(message, "q
    ") || !strcmp(message, "Q
    ")) {
    53             break;
    54         }
    55 
    56         write(sock, message, strlen(message));
    57         str_len = read(sock, message, BUFF_SIZE - 1);
    58         message[str_len] = 0;
    59         printf("Message from server : %s 
    ", message);
    60     }
    61     close(sock);
    62     return 0;
    63 }
  • 相关阅读:
    自我介绍
    第一学期第一周学习总结
    2020-2021-1 20201332杨赛 《信息安全专业导论》第一周学习总结
    自我介绍
    2020-2021-1 20201307 《信息安全专业导论》第2周学习总结
    师生关系
    教材快速浏览
    2020-2021-1 20201307 《信息安全专业导论》第一周学习总结
    自我介绍
    20201319《信息安全导论》第一周学习总结
  • 原文地址:https://www.cnblogs.com/hustcser/p/4105962.html
Copyright © 2011-2022 走看看