如何使我的服务器在C中接受多个客户端? (TCP套接字编程)

时间:2019-04-21 14:07:10

标签: c sockets server client

我正在使用TCP-IP聊天室,并且我的服务器只能接受一个客户端。该客户端能够发送消息,服务器可以正确地将消息写回其正在运行的终端中。

问题是我想让我的服务器接受多个客户端,但是我不知道如果没有fork()或pthread,那是否有可能。

我的套接字编程知识非常基础,这是我上大学时的一项家庭作业,老实说我很固执。

基本上,我可以通过观看教程和阅读代码来实现:

Client.c:

self.rect.y

Server.c:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define BUFSIZE 1024                      
#define PORT_NO 2001                      
#define error(a,b) fprintf(stderr, a, b)  

int main(int argc, char *argv[] ){ 

   int fd;                     
   int flags;                      
   struct sockaddr_in server;      
   struct sockaddr_in client;      
   int server_size;                
   int client_size;                
   int bytes;                      
   int rcvsize;                    
   int trnmsize;                   
   int err;                        
   char on;                        
   char buffer[BUFSIZE+1];         
   char server_addr[16];          

   on                     = 1; 
   flags                  = 0;    
   sprintf(server_addr, "%s", argv[1]);
   server.sin_family      = AF_INET;
   server.sin_addr.s_addr = inet_addr(server_addr);
   server.sin_port        = htons(PORT_NO);
   server_size            = sizeof server;
   client_size            = sizeof client;

   fd = socket(AF_INET, SOCK_STREAM, 0 ); 
   if ( fd < 0 ) { 
      error("%s: Socket creation error\n",argv[0]);
      exit(1);
      }

   setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof on);
   setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (char *)&on, sizeof on);

   err = connect( fd, (struct sockaddr *) &server, server_size);
   if ( err < 0 ) {
      error("%s: Cannot connect to server\n",argv[0]);
      exit(2);
      }

while (1)
   {
    printf(" Message: ");
    scanf("%s",buffer);
    bytes=strlen(buffer)+1;

    trnmsize = send( fd, buffer, bytes, flags );
    if ( trnmsize < 0 ) { 
            error("%s: Cannot send to server\n",argv[0]);
            exit(3);
        }

    printf (" %i bytes have been sent to server.\n", trnmsize-1);

    rcvsize = recv( fd, buffer, bytes, flags );
    if ( rcvsize < 0 ) {
            error("%s: Cannot receive from the socket\n",argv[0]);
            exit(4);
        }

    if (strcmp(buffer,"Transmit is OK."))
            printf (" Acknowledgement has been received from server.\n");
    else
            printf(" Acknowledgement error!");

   }

   close(fd);
   exit(0);
   }

谢谢!

0 个答案:

没有答案