Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/12/2006, à 18:47

neojoe666

Programmation Sockets

Bonjour tout le monde,

j'ai un petit souci avec un programme de communication.
Voici mon serveur:

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>

#define TAILLEMAX 100
#define PORT 6881

int main ()
{
	int sock;
	int snew;
	char *buf;
	char msg[TAILLEMAX], nom[TAILLEMAX];
	struct sockaddr_in server;
	struct hostent *hp;
	int lg;
	struct sockaddr_in client;

	gethostname(nom,sizeof(nom));
	hp = gethostbyname(nom);
	
	sock = socket(AF_INET,SOCK_STREAM,0);
	bzero (& server, sizeof(server));
	server.sin_addr.s_addr = htonl(INADDR_ANY);
	server.sin_family = AF_INET;
	server.sin_port = htons (PORT);
	bcopy((char *)hp->h_addr,(char *)&server.sin_addr,hp->h_length);

	if(bind(sock,(struct sockaddr *) &server,sizeof(server)) == -1)
		perror("erreur de lien");
	listen(sock,5);
	snew = accept(sock,(struct sockaddr *) &client,&lg);

	read(snew,buf,1024);
	printf("Msg recu et renvoyé côté serveur: %s\n", buf);
	write(snew,buf,strlen(buf)+1);

	close(sock);
	close(snew);

	return 0;
}

Et voici mon client:

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>

#define TAILLEMAX 100
#define PORT 6881

int main ()
{
	int sock,cc;
	char *buf;
	char msg[TAILLEMAX], nom[TAILLEMAX];
	struct sockaddr_in server;
	struct hostent *hp;
	int lg;

	gethostname(nom,sizeof(nom));
	hp = gethostbyname(nom);
	
	sock = socket(AF_INET,SOCK_STREAM,0);
	bzero (& server, sizeof(server));
	server.sin_addr.s_addr = htonl(INADDR_ANY);
	server.sin_family = AF_INET;
	server.sin_port = htons (PORT);
	bcopy((char *)hp->h_addr,(char *)&server.sin_addr,hp->h_length);

	cc = connect(sock,(struct sockaddr *)&server,sizeof(server));
	
	gets(msg);
	
	printf("Msg Client: %s\n", msg);
	write(sock,&msg,strlen(msg)+1);

	read(sock,buf,1024);
	printf("Msg recu coté client : %s\n",buf);
	
	close(sock);

	return 0;
}

Tout ceci marchait très bien sous une Debian et là je suis passé sous Ubuntu 6.10 et ça ne marche pas. Je lance le serveur qui se met en attente, je lance le client et là, avant même d'avoir envoyé un message, le serveur m'affiche:

Msg recu et renvoy� c�t� serveur: GLIBC_2.0

Et mon serveur se termine.
Quelqu'un aurait une solution?
Merci

Hors ligne

#2 Le 12/12/2006, à 18:54

Santa

Re : Programmation Sockets

Juste au cas où, une petite piste pour ton debuggage:
L'outil 'nc' pourrait te servir de 'simulateur' client / serveur.

Exemple: nc -l -p 1212 crée un serveur écoutant sur le port 1212
Et nc localhost 1212 s'y connecte et tout ce que tu tapes est envoyé à l'autre.

Comme ça ressemble furieusement à ce que tu fais, peut-être cela t'aidera-t-il a savoir si ton problème vient du client ou du serveur...


S'il n'y a pas de réponse simple, c'est peut-être que le problème est compliqué...

Hors ligne

#3 Le 12/12/2006, à 19:06

neojoe666

Re : Programmation Sockets

Mais pourquoi ça marche sur une Debian et pas sous Ubuntu? je ne pense pas que ça vienne de mon programme à cause de ce fait.

Hors ligne