Advertisement
Abstract-Chief

server/server.c

Apr 28th, 2022
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.28 KB | None | 0 0
  1. #include <sys/types.h>
  2. #include <sys/types.h>
  3. #include <sys/socket.h>
  4. #include <netinet/in.h>
  5. #include<unistd.h>
  6. #include<stdlib.h>
  7. #include<stdio.h>
  8. #include<arpa/inet.h>
  9.  
  10. #define QUE_LEN 10
  11.  
  12. void error(const char *msg){
  13.    perror(msg);
  14.    exit(1);
  15. }
  16.  
  17. void SendServer_char(char *buf,int my_socket,struct sockaddr *server_addr){
  18.    if(sendto(my_socket,buf,1,0,server_addr,sizeof(*server_addr))<0){
  19.       error("send");
  20.    }
  21.    
  22. }
  23.  
  24. void remove_el(char *arr,int i){
  25.    arr[i++]=0;
  26.    for(;arr[i];i++){
  27.       arr[i-1]=arr[i];
  28.    }
  29. }
  30. typedef struct{
  31.    char name[32];
  32.    char password[32];
  33.    struct sockaddr addr;
  34. } User;
  35. int main(int argc,char *argv[]){
  36.    int my_socket;
  37.    my_socket=socket(AF_INET,SOCK_STREAM,0);
  38.    int opt=1;
  39.    setsockopt(my_socket,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
  40.  
  41.    if(my_socket<0){
  42.       error("mysocket");
  43.    }
  44.    /*создали сокет сервера*/
  45.    struct sockaddr_in socket_addr;
  46.    socket_addr.sin_family=AF_INET;
  47.    socket_addr.sin_port=htons(12345);
  48.    socket_addr.sin_addr.s_addr=htons(INADDR_ANY);
  49.    /*заполнили структуру адреса*/
  50.    if(bind(my_socket,(struct sockaddr*)&socket_addr,sizeof(socket_addr))<0){
  51.       error("bind");
  52.    }
  53.    struct sockaddr klient_addr;
  54.    socklen_t size=(socklen_t)sizeof(klient_addr);
  55.    
  56.    if(listen(my_socket,10)==-1){
  57.       error("listen");
  58.    }
  59.    char *klient_fd=calloc(100,sizeof(char));
  60.    fd_set readfd,writefd;
  61.    int s=0;
  62.    while(1){
  63.       int maxfd=my_socket;
  64.       FD_ZERO(&readfd);
  65.       FD_ZERO(&writefd);
  66.       FD_SET(my_socket,&readfd);
  67.       for(int i=0;klient_fd[i];i++){
  68.          FD_SET(klient_fd[i],&readfd);
  69.          if(maxfd<klient_fd[i]){
  70.             maxfd=klient_fd[i];
  71.          }
  72.       }
  73.       int res=select(maxfd+1,&readfd,NULL,NULL,NULL);
  74.       if(res<1){
  75.          error("select");
  76.       }
  77.       if(FD_ISSET(my_socket,&readfd)){
  78.          struct sockaddr addr;
  79.          klient_fd[s++]=accept(my_socket,&addr,&size);
  80.       }
  81.       for(int i=0;klient_fd[i];i++){
  82.          if(FD_ISSET(klient_fd[i],&readfd)){
  83.             User user;
  84.             read(klient_fd[i],&user,sizeof(user));
  85.             printf("%s %s\n",user.name,user.password);
  86.             remove_el(klient_fd,i);
  87.             s=0;
  88.          }
  89.       }
  90.    }
  91.    /*read(sock,buf,6);*/
  92.    /*printf("%s\n",buf);*/
  93.    /*close(my_socket);*/
  94. }
  95.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement