Salut tous le monde.
voilà je suis debutant dans le language C, j'ai fait un serveur avec C# et je veux le refaire dans C, j'ai etudie les socket, jusque arrivé a ce code :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <win\winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#include <pthread.h>
#pragma comment(lib, "pthreadVC2.lib")
//>------------------------------------------------------------------------>
struct repp
{
char *nom;
char *ip;
char *OSver;
};
struct repp infosys;
unsigned int s_( char* str, char* cmp[])
{
unsigned int i = 0;
while (cmp[i] != 0)
{
if (strcmp(str, cmp[i]) == 0)
return i+1;
i++;
}
return 0;
}
static void *dailog(void *sock)
{
infosys.OSver = (char*)"version OLD";
infosys.ip = (char*)"100.111.122.133";
infosys.nom = (char*)"my name is";
SOCKET ssock = (unsigned int)sock;
if (ssock == INVALID_SOCKET)
{
printf("socket non valide\n\a");
}
char buffer[255];
char* comp[] = {"i_nom", "i_ver", "i_ip", "i_date", "b", "",0};
while (1)
{
recv(ssock,buffer,sizeof(buffer)-1,0);
unsigned int id = s_((char*)buffer, comp);
switch(id)
{
case 1:
send(ssock,infosys.nom,strlen(infosys.nom),0);
break;
case 2:
send(ssock,infosys.OSver,strlen(infosys.OSver),0);
break;
case 3:
send(ssock,infosys.ip,strlen(infosys.ip),0);
break;
case 4:
send(ssock,"date",5,0);
break;
case 5:
send(ssock,"bye",4,0);
shutdown (ssock, 2);
closesocket(ssock);
return 0;
break;
case 6:
send(ssock,"#",4,0);
break;
default:
break;
}
}
free(&infosys);
free(&ssock);
free(&buffer);
return 0;
}
int main(void)
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKET csock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_family = AF_INET;
sin.sin_port = htons(23);
pthread_t ta;
bind(sock, (SOCKADDR *)&sin, sizeof(sin));
listen(sock, 4);
printf("serveur lancer en ecoute sur le port %d avec l'ip %s \n\a",htons(sin.sin_port),inet_ntoa(sin.sin_addr));
while(1)
{
int sinsize = sizeof(csin);
if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
{
send(csock, "Hello world!\r\n", 14, 0);
//dailog(csock);
if (pthread_create (&ta, NULL, dailog,(unsigned int*)csock)==0)
{
printf("client sur port %d avec l'ip %s\n\a",htons(csin.sin_port),inet_ntoa(csin.sin_addr));
}
else
{
printf("erreur pour l'ip %s .",inet_ntoa(csin.sin_addr));
}
pthread_join (ta, NULL);
//printf("client a l'ip %s sur le port %d n'est plus la !!\n\a",inet_ntoa(csin.sin_addr),htons(csin.sin_port));
}
}
free(&csin);
free(&sin);
free(&sock);
free(&csock);
free(&ta);
printf("terminer !!\a\a\a");
system("pause");
return 0;
}
le principe et simple, et je veux que plusieur connexion au meme serveur soit possible.
j'ai fais les pthread, mais je ne sais pas pourquoi ça ne marche pas, une connexion et possible mais sans reponse de serveur au requete de client.
ps : le client et en C#, je croix que c'est pas un problem !! ?