Utulisation des thread avec les sockets

Fermé
lgilgi Messages postés 1 Date d'inscription samedi 25 août 2012 Statut Membre Dernière intervention 25 août 2012 - 25 août 2012 à 10:06
Bonjour,

je suis un débutant en programmation socket et j'aimerais réaliser un chat de deux clients et un serveur dont un thread de réception en mode serveur qui écoute sur le port 10000 et un Thread d'envoi qui utilise un numéro de port temporaire .Voici le code au niveau du serveur:

#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <errno.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/uio.h>
#include <stddef.h>
#include <string.h>
#include <unistd.h>
#include<stdio.h>
#include <pthread.h>
int valsock;
int valbind;
int vallisten;
int valaccept , valsend , valaccept2;
pthread_t thread_envoie, thread_reception;

int main(int argc , char *argv[])
{

int client=sizeof(struct sockaddr_in);;
struct sockaddr_in server_addr,client_addr ,client2_addr;
server_addr.sin_family = AF_INET;
//server_addr.sin_port = htons(5000);
server_addr.sin_addr.s_addr = INADDR_ANY;
//server_addr.sin_addr.s_addr = inet_addr(argv[1]);
argv[1]="10000";
server_addr.sin_port = htons (atoi(argv[1]));
bzero(&(server_addr.sin_zero),8);

//creation de la socket tcp
valsock = socket(AF_INET, SOCK_STREAM, 0);
if(valsock==-1)
{
perror("Erreur de creation de socket");
exit(1);
}
//sinon
printf("Socket tcp creer:\n");
//creation bind
valbind=bind(valsock, (struct sockaddr *)&server_addr, sizeof(server_addr));
if(valbind==-1)
{
perror("Erreur bind\n");
exit(1);
}
printf("bind bien fait:\n");

vallisten=listen(valsock, 5);
if(vallisten==-1)
{
perror("No listen\n");
exit(1);
}
printf("Listen bien\n");
/*Acceptez la connection*/
valaccept = accept(valsock, (struct sockaddr *)&client_addr, &client);
valaccept2 = accept(valsock, (struct sockaddr *)&client2_addr, &client);

if(valaccept == -1)
{
perror("Erreur de Accept");
exit(1);
}
//printf("Le client %s s'est connecté avec succès\n",inet_ntoa(client_addr.sin_addr));
//reception
while(1)
{

pthread_create(&thread_envoie,NULL,fonction,"Premier Thread");
pthread_create(&thread_reception,NULL,fonction,"Second Thread");

char bufferRecv[255] = {0};
recv(valaccept, (void *) bufferRecv, 20*sizeof(char), 0);
printf("Le client1 %s > %s \n",inet_ntoa(client_addr.sin_addr),bufferRecv);
bufferRecv[255] = '\n';
recv(valaccept2, (void *) bufferRecv, 20*sizeof(char), 0);

printf("Le client1 %s > %s \n",inet_ntoa(client2_addr.sin_addr),bufferRecv);
//envoie
char bufferSend[255];
printf("ecrit:");
gets(bufferSend);

valsend = send(valaccept, (void *)bufferSend, strlen(bufferSend), 0);
if(valsend<0)
{
perror("Erreur send!!!\n");
exit(1);
}
shutdown(valaccept,2);
shutdown(valaccept2,2);

}
close(valsock);

return 0;
}


j'aimerais bien que vous m'aidiez à bien utuliser les thread au niveau du serveur.