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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
| #include "appli.h"
#define SERVEUR_STARTUP 100
#define SERVEUR_CLOSE 101
t_Serveur serveur;
char Buff[BUFF_SIZE];
WSADATA wsaData;
int Serveur(int sc, int pa)
{
switch(sc)
{
/******************************************************************************************************************************/
case SERVEUR_NEW:
Serveur(SERVEUR_STARTUP, 0);
//Création de la socket serveur : Protocole IPv4, Flux de données binaires, Protocole TCP ( mode "connecté")
if((serveur.ServeurSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
{
Fin("Echec lors de la création de la socket serveur.\n");
}
//Remplissage de la structure concernant les informations de la socket
serveur.ServeurSin.sin_family = PF_INET; //Protocole IPv4
serveur.ServeurSin.sin_addr.s_addr = htonl(INADDR_ANY); //Ecoute sur toutes les adresses IP
serveur.ServeurSin.sin_port = htons(PORTSQL); //Port du serveur
//Liaison de la socket serveur avec la structure sockaddr
//La structure contenant les informations est sockaddr_in, nous faisons donc un cast
if(bind(serveur.ServeurSock, (SOCKADDR *)&serveur.ServeurSin, sizeof(serveur.ServeurSin)) == SOCKET_ERROR)
{
Fin("Echec du bind.\n");
}
break;
/******************************************************************************************************************************/
case SERVEUR_LISTEN:
pa = listen(serveur.ServeurSock, 0);
if(pa == SOCKET_ERROR)
{
Fin("Echec de l'écoute sur la socket.\n");
}
else{
pa = Client(CLIENT_NEW, 0); //Création d'un objet clients.
return pa;
}
break;
/******************************************************************************************************************************/
case SERVEUR_ACCEPT:
//La fonction accepte la connection d'un socket clients sur le socket serveur
pa->ClientSock = accept(serveur.ServeurSock, (SOCKADDR *)&(pa->ClientsSin), &(pa->SinSize));
if(pa->ClientSock == INVALID_SOCKET)
{
Fin("Echec de la connection du clients.\n");
}
else
{
printf("\nNouvelle connexion : %s se connecte.\n", inet_ntoa(pa->ClientsSin.sin_addr));
strcpy(Buff, "-- Bienvenue sur le serveur SQL");
send(pa->ClientsSock, Buff, (int)strlen(Buff), 0);
}
break;
/******************************************************************************************************************************/
/* case SERVEUR_RECV:
//Reception d'un message depuis une socket clients.
if((pa = (recv(clients[Id].ClientsSock, *Buff, sizeof(*Buff) - 1, 0))) == SOCKET_ERROR)
{
Fin("Echec de la reception du message clients.\n");
}
else
{
printf("%s dit : %s\n", inet_ntoa(clients[Id].ClientsSin.sin_addr), Buff);
}
break;
/******************************************************************************************************************************/
/* case SERVEUR_SEND:
//Envoie d'un message à destination d'une socket
strcpy(Buff, "Message.\n");
if(send(clients[Id].ClientsSock, Buff, (int)strlen(Buff), 0) < 0)
{
Fin("Echec de l'envoi du message au clients.\n");
}
break;
/******************************************************************************************************************************/
case SERVEUR_DEL:
closesocket(serveur.ServeurSock); //Fermeture de la socket serveur.
Serveur(SERVEUR_CLOSE, 0);
break;
/******************************************************************************************************************************/
case SERVEUR_STARTUP:
if(WSAStartup(MAKEWORD(2, 0), &wsaData) != 0)
{
Fin("Initialisation DLL Wsa : Echec.\n");
}
if(AsyncSelect(FD_READ|FD_WRITE|FD_ACCEPT|FD_CONNECT|FD_CLOSE) == FALSE)
{
Fin("AsyncSelect : FALSE.");
}
break;
/******************************************************************************************************************************/
case SERVEUR_CLOSE:
WSACleanup();
break;
/******************************************************************************************************************************/
default:
Fin("SERVEUR_*** : bad sc");
break;
/******************************************************************************************************************************/
}
return 0;
} |
Partager