• TCP通讯程序设计


                      TCP通讯程序设计

      这里主要包含客户机和服务器的编程。

    一、编程模型函数化

      使用函数说明:socket的理解

    服务器:

    创建socket使用函数----->socket

    绑定地址使用函数------->bind

    监听端口使用函数------->listen

    等待连续使用函数------->accept

    收发使用函数---------->recv/send

    结束连续-------------->close

    客户机:

    创建socket使用函数----->socket

    连接服务器函数--------->connect

    收发使用函数----------->send/recv

    结束连接使用函数------->close

    二、首先编写服务器的代码

      touch tcp_server.c

      chmod 777 tcp_server.c

    代码如下:

     1 #include <stdio.h>
     2 #include <sys/types.h>   
     3 #include <sys/socket.h>
     4 #include <string.h>
     5 #include <netinet/in.h>
     6 
     7 #define portnum 3333
     8 
     9 int main()
    10 {
    11     int sockfd;
    12     int new_fd;
    13     char buffer[128];
    14     int sin_size;
    15     struct sockaddr_in server_addr;
    16     struct sockaddr_in client_addr;
    17     int nbyte=10;   //表示打印前10个字符
    18     //1.创建套接字
    19     if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
    20     {
    21         printf("creat socket error!
    ");
    22         exit(1);
    23     }
    24     
    25     //2.1设置绑定的地址
    26     bzero(&server_addr,sizeof(struct sockaddr_in)); 
    27     server_addr.sin_family = AF_INET;
    28     server_addr.sin_port = htons(portnum);
    29     server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    30     
    31     //2.2绑定地址
    32     bind(sockfd, (struct sockaddr *)(&server_addr),sizeof(struct sockaddr));
    33 
    34     //3.监听端口
    35     listen(sockfd,5);
    36     
    37     while(1)
    38     {
    39         //4.等待连接
    40         sin_size = sizeof(struct sockaddr);
    41         new_fd = accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size);
    42         printf("server get connection %s
    ",inet_ntoa(client_addr.sin_addr));
    43     
    44         //5.接受数据
    45         recv(new_fd,buffer,128,0);
    46         buffer[nbyte] = '';
    47         printf("server receive : %s
    ",buffer);
    48     
    49         //6.结束连接
    50         close(new_fd);
    51     }
    52     close(sockfd);
    53 }

    编译运行:gcc tcp_server.c -o tcp_server ---------->./tcp_server

    三、编写客户机的代码

    touch tcp_client.c

    chmod 777 tcp_client.c

    代码如下:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <sys/socket.h>
     4 #include <sys/types.h> 
     5 #include <netinet/in.h>
     6 
     7 #define portnum 3333
     8 
     9 int main()
    10 {
    11     int sockfd;
    12     char buffer[128];
    13     struct sockaddr_in server_addr;
    14     //1.创建套接字
    15     if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
    16     {
    17         printf("creat socket error!
    ");
    18         exit(1);
    19     }
    20     //2.1设置要连接色服务器的地址
    21     bzero(&server_addr,sizeof(struct sockaddr_in)); 
    22     server_addr.sin_family = AF_INET;
    23     server_addr.sin_port = htons(portnum);
    24     server_addr.sin_addr.s_addr = inet_addr("192.168.58.128");
    25     
    26     //2.2连接服务器
    27     if (connect(sockfd,(struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == -1)
    28     {
    29         printf("connect error! 
    ");
    30     }
    31     
    32     //3.发送数据到服务器
    33     printf("please input char:
    ");
    34     fgets(buffer,128,stdin);
    35     send(sockfd,buffer,strlen(buffer),0);
    36     //4.关闭连接
    37     close(sockfd);
    38     return 0;
    39 }

    编译运行gcc tcp_client.c -o tcp_client-------------->./tcp_client

    四、运行结果如下

    1.服务器运行进入等待

    2.在客户机等待输入的字符中输入字符

    3.可以看到服务器收到信息并且打印出来

  • 相关阅读:
    【Python学习之旅】---模块介绍(re模块,正则表达式)
    【Python学习之旅】---模块介绍(sys模块)
    【Python学习之旅】---模块介绍(随机模块)
    【Python学习之旅】---模块介绍(时间模块)
    【Python学习之旅】---模块介绍(调用与执行)
    【Python学习之旅】---装饰器实现(高阶函数+函数嵌套+闭包,不修改函数调用方式和源代码)
    【Python学习之旅】---生成器的好处
    Educational Codeforces Round 61 (Rated for Div. 2) C
    牛客练习赛41 B. 666RPG
    牛客练习赛41 B. 666RPG
  • 原文地址:https://www.cnblogs.com/wmx-learn/p/5312553.html
Copyright © 2020-2023  润新知