server.c

来自「利用socket套接字来实现客户端和服务器端的通讯的简单实例」· C语言 代码 · 共 85 行

C
85
字号
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <malloc.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <stdarg.h>
#define SERVPORT 8765
#define BACKLOG 10
main()
{      
   FILE *fp;
      char buf[50],msg[50];
      int sockfd,clientfd;
          struct sockaddr_in my_addr;
          struct sockaddr_in remote_addr;
        int  sin_size=sizeof(struct sockaddr_in);
 
        if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
       {
         perror("socket error\n");
         exit(1);
       }
 
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVPORT);
my_addr.sin_addr.s_addr=INADDR_ANY;
bzero(&(my_addr.sin_zero),8);
 
        if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr)) == -1)
       {
         perror("bind error\n");
         exit(1);
       }
 
    if(listen(sockfd,BACKLOG)== -1)
       {
         perror("listen error\n");
         exit(1);
       }   
                      
 while(1)
   {
           if((clientfd = accept(sockfd,(struct sockaddr *)&remote_addr,&sin_size)) == -1)
             {
               perror("accept error");
               continue;
             } 
 
          if(recv(clientfd,buf,20,0)== -1)
             {
               perror("recv error");
               exit(1);
             }
 
       if((fp = fopen("ser.conf","r")) != NULL)
           while(fgets(msg,30,fp)!=NULL)
             {
               if(msg[strlen(buf)] == '=')
               if(strncmp(msg,buf,strlen(buf)) == 0) break;      
             } 
        fclose(fp);
 
  printf("received a connection from %s\n",inet_ntoa(remote_addr.sin_addr));
     
if(!fork())
       {
         if(send(clientfd,msg,20,0)== -1)
           { 
             perror("send error");
             close(clientfd);
             exit(0);
           }
         close(clientfd);
       }
   }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?