Serveur + socket !!!

Fermé
mixtape Messages postés 18 Date d'inscription mardi 15 novembre 2005 Statut Membre Dernière intervention 22 mai 2006 - 4 déc. 2005 à 03:27
mixtape Messages postés 18 Date d'inscription mardi 15 novembre 2005 Statut Membre Dernière intervention 22 mai 2006 - 4 déc. 2005 à 16:54
salut tout le monde ; en faite je voulais savoir comment connecter plusieur client a mon serveur ,est ce que je doit faire plusieur socket ou comment ?!!!!! merci davance

2 réponses

Salam 3ala man ittaba3a alhoda !

voici le code C d'un serveur qui repond a ce que vous voulez :

/*

** selectserver.c - a cheezy multiperson chat server

*/

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#define PORT 2225

int main(void)

{

fd_set master;

fd_set read_fds;

struct sockaddr_in myaddr;

struct sockaddr_in remoteaddr;

int fdmax;

int listener;

int newfd;

char buf[256];

int nbytes;

int yes=1;

int addrlen;

int i, j;

FD_ZERO(&master);

FD_ZERO(&read_fds);



if ((listener = socket(AF_INET, SOCK_STREAM, 0)) == -1) {

perror("socket");

exit(1);

}



//if (setsockopt(listener, SOL_SOCKET, SO_REUSEADDR, &yes,

//sizeof(int)) == -1) {

//perror("setsockopt");

//exit(1);

//}



myaddr.sin_family = AF_INET;

myaddr.sin_addr.s_addr = INADDR_ANY;

myaddr.sin_port = htons(PORT);

memset(&(myaddr.sin_zero), '\0', 8);

if (bind(listener, (struct sockaddr *)&myaddr, sizeof(myaddr)) == -1) {

perror("bind");

exit(1);

}



if (listen(listener, 10) == -1) {

perror("listen");

exit(1);

}


FD_SET(listener, &master);


fdmax = listener;


for(;;) {

read_fds = master;

if (select(fdmax+1, &read_fds, NULL, NULL, NULL) == -1) {

perror("select");

exit(1);

}


for(i = 0; i <= fdmax; i++) {

if (FD_ISSET(i, &read_fds)) {

if (i == listener) {



addrlen = sizeof(remoteaddr);

if ((newfd = accept(listener, (struct sockaddr *)&remoteaddr,

&addrlen)) == -1) {

perror("accept");

} else {

FD_SET(newfd, &master);

if (newfd > fdmax) {

fdmax = newfd;

}

printf("selectserver: new connection from %s on "

"socket %d\n", inet_ntoa(remoteaddr.sin_addr), newfd);

}

} else {


if ((nbytes = recv(i, buf, sizeof(buf), 0)) <= 0) {



if (nbytes == 0) {



printf("selectserver: socket %d hung up\n", i);

} else {

perror("recv");

}

close(i);

FD_CLR(i, &master);

} else {
printf("------------------>salam %s\n",buf);



for(j = 0; j <= fdmax; j++) {



if (FD_ISSET(j, &master)) {



if (j != listener && j != i) {

if (send(j, buf, nbytes, 0) == -1) {

perror("send");

}

}

}

}

}

}

}

}

}

return 0;

}
0
mixtape Messages postés 18 Date d'inscription mardi 15 novembre 2005 Statut Membre Dernière intervention 22 mai 2006 1
4 déc. 2005 à 16:54
merci faico , mais est ce que tu peut me dire au juste si je doit cree plusieur socket pour connecter plusieur client ou juste qu 1 .... merci et salam
0