Rechercher : dans
Par :

[C sous UNIX] Sockets TCP/IP sous UNIX

Dernière réponse le 18 avr 2007 à 11:30:22 titi41, le 17 avr 2007 à 16:26:14 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « [C sous UNIX] Sockets TCP/IP sous UNIX » dans :
TCP/IP Voir Que signifie TCP/IP? TCP/IP est une suite de protocoles. Le sigle TCP/IP signifie «Transmission Control Protocol/Internet Protocol» et se prononce «T-C-P-I-P». Il provient des noms des deux protocoles majeurs de la suite de protocoles, c'est...
Port/Ports TCP/IP Voir L'utilité des ports De nombreux programmes TCP/IP peuvent être exécutés simultanément sur Internet (vous pouvez par exemple ouvrir plusieurs navigateurs simultanément ou bien naviguer sur des pages HTML tout en téléchargeant un fichier par FTP)....
Le modèle TCP/IP VoirLe modèle TCP/IP Cet article décrit le modèle de référence TCP/IP, qui est la norme historique et technique d’Internet. Le ministère américain de la Défense a créé le modèle de référence TCP/IP parce qu’il avait besoin de concevoir un réseau...
Commandes IP relatives aux réseaux sous Windows VoirIl est parfois très utile de connaître les commandes IP, pour analyser voire configurer ses réseaux TCP/IP. Voici la liste de ces commandes à utiliser dans une fenêtre DOS...
[Windows] Changer l'adresse IP en ligne de commande avec Netsh VoirSous les systèmes Windows 2000/Windows XP et supérieurs, il est possible de modifier les paramètres TCP/IP à partir d'une simple ligne de commande, afin par exemple d'automatiser cette tâche grâce à un script. Ceci est possible grâce à l'outil...
Configuration d'un serveur d'un réseau TCP/IP sous Linux VoirIntroduction Dans cette partie , nous allons décrire toutes les étapes nécessaires pour configurer votre réseau TCP/IP sur votre serveur. Tout d'abord, nous verrons les types d'adressage IP, ensuite, nous configurerons vos interfaces réseaux et...
Les fonctions de l'API Socket VoirLes fonctions des sockets en détail La fonction socket() La création d'un socket se fait grâce à la fonction socket() : int socket(famille,type,protocole) famille représente la famille de protocole utilisé (AF_INET pour TCP/IP utilisant une...
Le protocole IP VoirLe rôle du protocole IP Le protocole IP fait partie de la couche Internet de la suite de protocoles TCP/IP. C'est un des protocoles les plus importants d'Internet car il permet l'élaboration et le transport des datagrammes IP (les paquets de...

1

andejen, le 17 avr 2007 à 16:34:18

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

titi41, le 17 avr 2007 à 16:45:56
  • +1

Si j'ai des erreurs dans mon code, je pourrai vous demander ?

Répondre à titi41

3

andejen, le 17 avr 2007 à 16:50:04

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

titi41, le 17 avr 2007 à 18:05:35

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

titi41, le 17 avr 2007 à 20:45:38

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

andejen, le 18 avr 2007 à 10:38:35

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

 titi41, le 18 avr 2007 à 11:30:22

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
Collection CommentÇaMarche.net