5.3.1 Le main.cpp du server

Voici le fichier main.cpp du server :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//Main SERVER
#include <iostream>

#include "../libnetwork/psocket_init.h"
#include "../definition_ports.h"

#define BACKLOG 10

int main(int argc, char **argv) {
	std::cout << "Hello, world server!" << std::endl;
	int sockfd = createTCPsocketServer(PORT, BACKLOG);
	int new_fd;
	socklen_t sin_size;
	struct sockaddr_storage their_addr; // connector's address information
	char s[INET6_ADDRSTRLEN];
	char buffer[MAXDATASIZE];
	printf("server: waiting for connections...\n");
	bool run(true), waitForPacket;
	while(run){
		/* This check the sd if there is a pending connection.
		* If there is one, accepte that, and open a new socket for communicating */
		sin_size = sizeof their_addr;
		new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);
		if(new_fd != - 1){  //si on peut encore se connecter
			close(sockfd);
			waitForPacket = true;
			while(waitForPacket){
				if (recv(new_fd, buffer, MAXDATASIZE, 0) > 0){
					printf("Client say: %s\n", buffer);
					if(strcmp(buffer, "exit") == 0){	/* Terminate this connection */
						waitForPacket = false;
						printf("Terminate connection\n");
					}
					if(strcmp(buffer, "quit") == 0){	/* Quit the program */
						waitForPacket = false;
						run = false;
						printf("Quit program\n");
					}
				}
			}
			/* Close the client socket */
			close(new_fd);
		}
	}
	close(sockfd);
	
	
	std::cout << "Arrêt du server..." << std::endl;
	return 0;
}

Vous avez remarqué le //Main SERVER au début du fichier, c'est pour savoir quel main on est en train d'écrire. Faites le dans les projets où vous avez plusieurs fichiers main, ça vous gagnera du temps.

On pourait l'écrire en C, mais si on veut traiter des chaînes de caractères plus tard, se sera plus simple avec des std::string.