KioskeaKioskeaCommentCaMarcheInscrivez-vous, c'est gratuit !
Samedi 17 mai 2008 - 22:04:04

[C sous UNIX] Sockets TCP/IP sous UNIX

Rechercher : dans
[C sous UNIX] Sockets TCP/IP sous UNIX
par titi41
 Fil de Discussions
Statut : Résolu
mardi 17 avril 2007 à 16:26:14
Bonjour,
Je suis en DUT informatique et je dois faire un petit chat en C sous UNIX (et un jeu en réseau également)
Je suis complètement perdu, on a pas encore vu les sockets.
Est-ce que vous pourriez m'aider ?
Merci de votre réponse
Configuration: Linux Mandriva
Firefox 1.0.8
Répondre à titi41  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par andejen, le mardi 17 avril 2007 à 16:34:18 Fil de Discussions
Bonjour,

Je te conseille deja ce site la pour commencer:
http://www.frameip.com/winsock/
http://www.frameip.com/c-mode-non-connecte/
http://www.frameip.com/c-mode-connecte/

A savoir qu'il y a vraiment multitude de tutoriaux sur les sockets sur internet.

Bon courage pour ces projets. "Dido plus tard ce sera ma femme", Stupeflip
Répondre à andejen

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par titi41, le mardi 17 avril 2007 à 16:45:56 Fil de Discussions
si j'ai des erreurs dans mon code, je pourrai vous demander ?
Répondre à titi41

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par andejen, le mardi 17 avril 2007 à 16:50:04 Fil de Discussions
Oui je pense que y a pas mal de monde ici pret a aider du moment que tu essayes de le faire apr toi meme. :)
Bonnes lectures. "Dido plus tard ce sera ma femme", Stupeflip
Répondre à andejen

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par titi41, le mardi 17 avril 2007 à 18:05:35 Fil de Discussions
J'ai réussi a faire ca, c'est la partie serveur. Mais ca ne compile pas..

Je vous met le code

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <fcntl.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define MAX_SIZE 256
#define PORT 44412

int main(int argc, char *argv[])
{
struct hostent *hp = NULL;
struct sockaddr_in serv_ad, client_ad;
int sin_size,retour;
unsigned long addr;
int sockd, sockcli;
int valide;

if (argc != 2) 
{
	printf("Probleme d'arguments\n");
	exit (1);
}
hp = argv[1] ;
//open the socket
if ((sockd=socket(AF_INET, SOCK_DGRAM, 0))==-1)
{
	printf(" error open socket\n");
	return -1;
}

	
if (setsockopt(sockd, SOL_SOCKET, SO_REUSEADDR, &valide, sizeof(int))==-1) 	
{
	printf(" error set socket  options\n");
	return -1;
}

//configuration de serv_ad
serv_ad.sin_family=AF_INET; 
serv_ad.sin_port=htons(PORT); 
serv_ad.sin_addr.s_addr=hp->h_addr; 
serv_ad.sin_zero[8]=0; 
sin_size= hp->h_length;
if(bind(sockd, (struct sockaddr*)&serv_ad,sin_size)==-1)
{
	printf(" error bind\n");
	return -1;
}

if (connect(sockd,(struct sockaddr*)&serv_ad,sin_size)==1)
{
	printf(" error connect\n");
	return -1;
}

if (send(sockd,(char*)&serv_ad,sizeof(serv_ad),0)==-1)
{
	printf(" error send\n");
	return -1;
}

while(1) 
{
// lancement de l'attente de connexion client
	if (listen(sockd,5)==-1)
	{
		printf(" error listen\n");
		return -1;
	}

	if (accept(sockd,(struct sockaddr*)&serv_ad,&sin_size)==-1)
	{
		printf(" error accept\n");
		return -1;
	
	}
// dialogue avec le client
	retour = recv(socket,(char*)&serv_ad,sizeof(serv_ad),0 );
	if (retour == -1) 
	{
		printf(" error recv\n");
		return -1;
	}
	retour = send(socket,(char*)&serv_ad,sizeof(serv_ad),0 );
	if (retour == -1) 
	{
		printf(" error send\n");
		return -1;
	}
	
// fermeture socket client
	shutdown(sockcli,1);
	exit(0);
}

close(sockcli);

return 0;
}


Je vais essayer de m'attaquer a la partie client.
Merci a vous
Répondre à titi41

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par titi41, le mardi 17 avril 2007 à 20:45:38 Fil de Discussions
Et voila ma partie client.
Mais je n'ai pas pu tester

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define TAILLEMAX 256
#define PORT 44412

/* programme client */
main(int argc, char *argv[])
{
	int sd,lon,valide,retour;
	struct sockaddr_in adsock;
	struct hostent *hptr ; /* infos recuperes sur le host */
	char buf[TAILLEMAX] ; /*buffer de lecture des infos */
	char *host ; /*pointeur sur le nom du host distant */
	char *mesg ;


	if (argc != 2) 
	{
		printf("Probleme d'arguments\n");
		exit (1);
	}
	host = argv[1] ;


    lon=sizeof (hp->h_addr);
	adsock.sin_family=AF_INET; 
	adsock.sin_port=htons(PORT); 	
	memset (&adsock.sin_zero[8], 0, 1);
	memcpy (&adsock.sin_addr.s_addr, &hp->h_addr, lon);
	

   if ((sd=socket(AF_INET, SOCK_DGRAM, 0))==-1)
    {
        printf(" error open socket\n");
        return -1;
    }
    if (setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &valide, sizeof(int))==-1)
    {
        printf(" error set socket options\n");
        return -1;
    }

    if (connect(sd,(struct sockaddr*)&adsock,lon)==1)
    {
        printf(" error connect\n");
        return -1;
    }


    retour = send(sd,(char*)&adsock,sizeof(adsock),0 );
    if (retour == -1)
    {
        printf(" error send\n");
        return -1;
    }
    
    retour = recv(sd,(char*)&adsock,sizeof(adsock),0 );
    if (retour == -1)
    {
        printf(" error recv\n");
        return -1;
    }

	shutdown(sd);
	close(sd) ;
	exit(0) ;
}



Quelqu'un peu m'aider ?
Merci beaucoup
Répondre à titi41

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par andejen, le mercredi 18 avril 2007 à 10:38:35 Fil de Discussions
donne les erreurs que le compilo te renvoie j'ai un peu la flemme de lire tout le code sans cibler le problème et je pense que je ne suis pas le seul ^^ "Dido plus tard ce sera ma femme", Stupeflip
Répondre à andejen

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par titi41, le mercredi 18 avril 2007 à 11:30:22 Fil de Discussions 
J'ai modifié mon approche et tout recommencé depuis le début. Ca a l'air de marcher, mais ce n'est pas encore fini.
Merci de ton aide andejen
Répondre à titi41
Discussions pertinentes trouvées dans le forum
23/01 18h23c'est quoi tcp/ip?Réseaux23/01 18h414
03/01 01h13Comment réinitialiser le TCP/IP sur vistaWindows19/04 16h204
02/05 15h35config. appareil avec TCP/IP et FTP serverInternet02/05 15h501
15/07 17h02Culture Generale et Tcp ipRéseaux15/07 17h542
Plus de discussions sur « [C sous UNIX] Sockets TCP/IP sous UNIX » Discussion en cours Discussion fermée Problème résolu
Répondre
Titre du message :
Votre pseudo:
Votre email :
Message: 
  •  
  •  
Options: Recevoir les réponses par mail.
 

Aide