Socket Linux - C - Programmation
Marsh Posté le 12-10-2009 à 10:53:20
J'ai un ami qui peut vous aider. Il s'appelle Google.
(Désolé, mais ne peut pas écrire de très longs messages sur un forum comme celui-ci, et donc on ne peut pas expliquer toute la théorie de TCP/IP ou d'UDP/IP. Voyer plutôt les tutoriaux, sur TCP/IP ou UDP/IP (en premier lieu, il faut choisir l'un de ces deux modes) et voir aussi les exemples de codes source qui existent aussi certainement sur internet.)
Marsh Posté le 12-10-2009 à 21:53:38
Ici tu trouveras le cours que je donnais en 2000 sur les socket Unix: http://fr.lang.free.fr/cours/SocketCsyst_v1.0.pdf
Et voici plusieurs exemples simplistes de communications via socket. Tous ces programmes font la même chose: le client fait saisir une chaine et l'envoie au serveur qui l'affiche.
Ils sont un peu vieux (2000) mais devraient quand-même se compiler sans problème. Ptet qq warnings mais rien de plus.
Exemple1: communication à travers un fichier socket - Ca ne fonctionne que si le client et le serveur sont sur la même machine
Le serveur
Code :
|
Le client
Code :
|
Exemple2: communication en tcp.
Le serveur
Code :
|
Le client
Code :
|
Il faudra créer une entrée "toto" en mode "tcp" dans "/etc/services" pour que le client et le serveur puissent récupérer un n° de port
Exemple3: communication en udp
Le serveur
Code :
|
Le client
Code :
|
Ici il faudra créer une entrée "toto" en mode "udp" dans "/etc/services" pour que le client et le serveur puissent récupérer un n° de port
Marsh Posté le 17-10-2009 à 00:40:14
Super c'est exatement ces bouts de code que j'avais besoin pour commencer mon projet.
J'ai donc choisi les sockets serveur/client en TCP.
Par contre quand je compile j'ai des erreurs...j'en ai corrigé une en rajoutant en include stdlib.h mais les erreurs dans le main je n'arrive pas à les corriger.
Voilà les erreurs que j'ai :
"serveur.c: In function ‘main’:
serveur.c:82: attention : passing argument 2 of ‘bind’ from incompatible pointer type
serveur.c:101: attention : passing argument 2 of ‘accept’ from incompatible pointer type
serveur.c:120:34: attention : trigraphe ??) ignoré, utilisez -trigraphs pour le permettre
serveur.c:126:33: attention : trigraphe ??) ignoré, utilisez -trigraphs pour le permettre
/tmp/ccuGFSZS.o: In function `main':
serveur.c.text+0x5e): warning: `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead"
Si quelqu'un peut m'aider !!!
merci à lui...
Marsh Posté le 17-10-2009 à 00:44:25
Et pour le client, j'ai le même type d'erreur :
"client.c: In function ‘main’:
client.c:52: attention : incompatible implicit declaration of built-in function ‘exit’
client.c:60: attention : incompatible implicit declaration of built-in function ‘exit’
client.c:80: attention : incompatible implicit declaration of built-in function ‘exit’
client.c:91: erreur: ‘struct sockaddr_in’ has no member named ‘sin_len’
client.c:103: attention : incompatible implicit declaration of built-in function ‘exit’
client.c:107: attention : passing argument 2 of ‘connect’ from incompatible pointer type
client.c:132: attention : incompatible implicit declaration of built-in function ‘exit’"
???
Marsh Posté le 17-10-2009 à 02:48:42
ReplyMarsh Posté le 19-10-2009 à 23:11:03
Ccabrel a écrit : J'ai oublié de préciser, je suis sous Ubuntu... |
Oui, il y a des trucs qui ont changé depuis que j'ai développé ces exemples
1) pour la fonction exit, faut inclure stdlib.h
2) sys_errlist est devenu déprécié. Faut remplacer sys_errlist[errno] par strerror(errno)
3) sin_len a disparu de la structure sockaddr_in => pas de souci, partout où j'y fais référence tu le supprimes (surtout que je ne m'en sers jamais sauf dans un printf)
Quand aux erreurs concernant accept et bind, c'est parce que ces fonctions sont des fonctions générales qui acceptent en entrée des pointeurs vers de simples "struct sockaddr"
Cette attitude permet d'utiliser bind et accept avec des socket unix (utilisant une struct sockaddr_un) ou des socket inet (utilisant une struct sockaddr_in)
Et donc à l'époque, le compilo ne disait rien. Aujourd'hui, il est plus chiant donc faut lui expliquer que tu sais ce que tu fais et quand t'appelles bind() et accept(), tu castes le pointeur passé en "struct sockaddr *"
Tout ça est expliqué dans mon cours sur les socket
L'erreur des trigraphs, je vois pas de quoi il s'agit.
Marsh Posté le 20-10-2009 à 00:08:33
ReplyMarsh Posté le 20-10-2009 à 23:31:54
Taz a écrit : merci pour ces 2000 lignes de code |
Elles ne te sont pas destinées donc je vois pas ce que tu ramènes ton grain de sel
Taz a écrit : l'erreur est à la ligne 42, colonne 69 |
Povtyp. T'as même pas vu qu'on ne te demande pas d'y trouver quoi que ce soit car les quelques erreurs dues à l'ancienneté du code ont été expliquées et sont facilement rectifiables !!!
Marsh Posté le 11-10-2009 à 02:56:13
Bonjour à tous,
Je suis nouveau sur ce forum et j'ai fini mes études info il y a trois ans. Mais je continu en cours du soir au CNAM.
J'ai fait des études info en réseau et pour mes cours j'ai un projet que je doit faire sous Linux en C, et la programmation, c'est pas mon fort !!!
Je vous soumets donc mon sujet :
« Écrire un programme permettant la mise en place de services bancaires. Les services sont les suivants :
- affichage du solde de compte (valeur et débit/crédit)
- affichage de l'intitulé du compte (nom, prénom, adresse, numéro de compte)
Le fonctionnement de ces services est un mode client/serveur qui permet un fonctionnement en réseau de l'application. Le port d'écoute du serveur est 1444.
Le serveur permet de traiter plusieurs opérations en parallèle. Lors d'une même transaction le client peut demander la réalisation des 2 services ou d'un seul. La communication entre le serveur et le client doit donc prendre en compte une demande identifiée de service.
Sur le serveur, un processus de gestion des appels doit être actif, il permet de tracer l'ensemble des appels et les demandes de service réalisé. Ce processus doit pouvoir afficher, le contenu de son journal sur demande.
Pour simplifier, le travail de programmation les structures correspondant aux informations des comtes bancaires sont stockées en mémoire centrale. Les demandes de services sont réalisés à partir du numéro de compte bancaire.
1) Décrivez le mode de fonctionnement de cette application en précisant le outils de communication utilisés. Précisez, pour chaque outil les raisons de votre choix.
2) Écrivez l'ensemble des programmes permettant de réaliser l'ensemble de ces services. Les programmes doivent être commentés afin d'en faciliter la lecture. »
Si quelqu'un se sent peut m'aider...je n'ai pas besoin d'un programme super compliqué, mais au contraire plus il sera simple, mieux j'aurai des chance de le comprendre...et comme demandé dans le sujet, les commentaires sont indispensable pour moi...
Un dernier petit détail, j'habite en Nouvelle Calédonie, donc si je ne répond pas rapidement àvos questions éventuelles, c'est sûrement du au décalage horaire...quand vous vous couchez, je part au boulot...
Merci d'avance à tous ceux qui pourront m'aider...