2017-12-11 6 views
-2

Ich habe ein Client- und Server-Programm, das mehrere Clients durch Forking nimmt. Jetzt muss ich ein Programm schreiben, das einen Server startet, und dann zwei Clients zum Verbinden verzweigen. Das Problem, mit dem ich konfrontiert bin, ist, dass der Server eine While-Schleife verwendet, um neue Verbindungen und Nachrichten zu akzeptieren, so dass das Hauptprogramm angehalten wird. Mein Ziel ist es, Server und Client gleichzeitig und nicht nacheinander laufen zu lassen.Linux Socket-Programm zum Starten von Server und Client

server.c

... 
ret = bind(sockfd, (const struct sockaddr *) &name, sizeof(struct sockaddr_un)); 
     if (ret == -1) { 
      perror("bind"); 
      exit(EXIT_FAILURE); 
     } 

ret = listen(sockfd, 20); 

while(1){ 

     new_fd = accept(sockfd, NULL, NULL); 

     if (new_fd < 0){ 
      perror("ERROR on accept"); 
        exit (EXIT_FAILURE); 
     } 

     if(!fork()) { 
      printf("child process \n"); 
     close(sockfd); 
     ret = write(new_fd, "GO \n", BUFFER_SIZE); 
     printf("Message sent \n________________________\n"); 
     close(new_fd); 
     exit(0);  
     } 


close(new_fd); 
} printf("loop exit \n"); 

unlink(SOCKET_NAME); 
exit(EXIT_SUCCESS); 

return 0; 
} 

main.c

int main() { 

pid_t server = fork(); 
execl("/home/dan/Documents/server/server",NULL); 

pid_t client1 = fork(); 
pid_t client2 = fork(); 

execl("/home/dan/Documents/client/client",NULL); 
return 0; 
} 
+0

Vielleicht die Manpage lesen für 'fork' ein vorsichtiger Anfang wäre –

Antwort

Verwandte Themen