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
| #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <string.h>
#include <winsock2.h>
#include <pthread.h>
#include "var.h"
void* maFonction(void* data);
int main()
{
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0)
fprintf(stderr, "La fonction WSAStartup a echoue.\n");
else
{
SOCKET s_server;
s_server = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s_server == INVALID_SOCKET)
fprintf(stderr, "La fonction socket a echoue.\n");
else
{
SOCKADDR_IN server;
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
server.sin_port = htons(5050);
memset(&server.sin_zero, '\0', sizeof(server.sin_zero));
if (bind(s_server, (SOCKADDR *)&server, sizeof(server)) == SOCKET_ERROR)
fprintf(stderr, "La fonction bind a echoue.\n");
else
{
if (listen(s_server, 0) == SOCKET_ERROR) /* listen : commencer l'ecoute */
fprintf(stderr, "La fonction listen a echoue.\n");
else
{
/* Création de l'ensemble de lecture */
fd_set readfs;
while(1)
{
/* On vide l'ensemble de lecture et on lui ajoute
la socket serveur */
FD_ZERO(&readfs);
FD_SET(s_server, &readfs);
/* On regarde si la socket serveur contient des
informations à lire */
if(FD_ISSET(s_server, &readfs))
{
/* Ici comme c'est la socket du serveur cela signifie
forcement qu'un client veut se connecter au serveur.
Dans le cas d'une socket cliente c'est juste des
données qui serons reçues ici*/
SOCKET s_client;
SOCKADDR_IN client;
int csize = sizeof(client);
s_client = accept(s_server, (SOCKADDR *)&client, &csize);
if (s_client == INVALID_SOCKET)
fprintf(stderr, "La fonction accept a echoue.\n");
else
{
char buffer[1024];
char buff[1024];
int n;
printf("Le client %s s'est connecte !\n", inet_ntoa(client.sin_addr));
strcpy(buffer, "Bonjour\n");
send(s_client, buffer, (int)strlen(buffer), 0);
n = recv(s_client, buffer, sizeof(buffer) - 1, 0);
pthread_t thread;
pthread_create(&thread, NULL, maFonction, &s_client);
}
}
}
}
}
}
WSACleanup();
}
return 0;
}
void* maFonction(void* data)
{
struct vari res;
res.s_client = *(int*)data;
while(1)
{
memset(res.buffer, '\0', sizeof(res.buffer));
res.n = recv(res.s_client, res.buffer, sizeof(res.buffer) - 1, 0);
printf("%s\n",res.buffer);
strcpy(res.buff, ("%s\n", res.buffer));
send(res.s_client, res.buff, (int)strlen(res.buff), 0);
}
} |