• unix网络编程 服务器和客户端通信


    服务器代码:

    //server.c
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<sys/types.h>
    #include<sys/socket.h>
    #include<string.h>
    #include<netinet/in.h>
    #include<errno.h>
    #include<sys/wait.h>
    
    #define MAX 5000
    #define LISTENQ 1024
    
    int main(int argc,char *argv[])
    {
         int sockfd,cliefd;
         pid_t childpid;
         struct sockaddr_in servaddr,cliaddr;
         char cli[MAX],ser[MAX];
         
         if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
         {
             printf("socket error
    ");
             exit(0);
         }
        
         bzero(&servaddr,sizeof(servaddr));
         servaddr.sin_family=AF_INET;
         servaddr.sin_port=htons(8080);
         servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
         
        int opt = 1;
        if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) != 0)
        {           
        perror("Server setsockopt failed");
        return 1;
        }
        if((bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)))<0)
         {
               printf("bind error:%s
    ",strerror(errno));
               exit(0);
         }
         
         listen(sockfd,LISTENQ);
    
        while(1)
       { 
         printf("waiting for connecting.
    ");
         if((cliefd=accept(sockfd,(struct sockaddr*)NULL,NULL))<0)
        {
            printf("connect faild
    ");
            exit(1);
        }
        else
        {
            printf("connect success
    ");
        }
        printf("welcome to chatting rome!!
    ");
        
        if((childpid=fork())==0)
        {
          close(sockfd);
          while(1)
         {
          int m;
          recv(cliefd,cli,500,0);
           m=strlen(cli);
           cli[m]='';
          if(cli[0]=='#') 
          {
            printf("From client:%s
    ",cli);
            printf("Over
    ");
            exit(0);
           }
          else
          {
            printf("From client:%s
    ",cli);
           // bzero(&cli,sizeof(cli));
            printf("To client:");
            fgets(ser,500,stdin);
            send(cliefd,ser,500,0);
            if(ser[0]=='#')
            {
              printf("Over
    ");
          bzero(ser,0);
              bzero(&cliefd,sizeof(cliefd));
              return(-1);
            }
           }
          }
        close(cliefd);
         }
         }
        close(sockfd);
       return 0;
    }          

    客户端代码:

    //client.c
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<sys/socket.h>
    #include<sys/types.h>
    #include<sys/wait.h>
    #include<netinet/in.h>
    #include<errno.h>
    
    #define MAX 1500
    
    int main(int argc,char *argv[])
    {
        int sockfd;
        struct sockaddr_in servaddr;
        char ser[MAX],cli[MAX];
    
        if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
        {
          printf("soket error
    ");
          exit(0);
        }
       
        bzero(&servaddr,sizeof(servaddr));
        servaddr.sin_family=AF_INET;
        servaddr.sin_port=htons(8080);
        inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
        
        if(connect(sockfd,(struct sockaddr*)&servaddr,sizeof(struct sockaddr))<0)
        {
          printf("connect error:%s
    ",errno);
          exit(0);
        }
        else
        {
           printf("connect success
    ");
           printf("welcome to chatting rome!
    ");
        }
        
        while(1)
       {
         int m;
         printf("To server:");
         fgets(cli,500,stdin);
         //m=strlen(cli);
         //cli[m]='';
         send(sockfd,cli,500,0);
         if(cli[0]=='#')
         {
            printf("Over
    ");
            exit(0);
         }
         else
         {  
            bzero(&cli,sizeof(cli));
            recv(sockfd,ser,500,0);
            m=strlen(ser);
            ser[m]='';
            printf("From server:%s
    ",ser);
            if(ser[0]=='#')
            {
               printf("Over
    ");
               exit(0);
            }
            bzero(&ser,sizeof(ser));
          }
        }
        close(sockfd);
        return 0;
    }

    服务器运行结果:

    客户端运行结果:

  • 相关阅读:
    requests模块
    unitest模块
    doctest模块
    SessionStorage
    jquery选择器
    jquery操作dom
    jquery事件
    jquery筛选
    页面跳转传值接收
    HTML5 Web SQL 数据库操作
  • 原文地址:https://www.cnblogs.com/181118ljh123/p/12002324.html
Copyright © 2020-2023  润新知