Socket de type Unix/Stream

Fermé
vih-10 Messages postés 11 Date d'inscription mardi 30 mars 2010 Statut Membre Dernière intervention 2 janvier 2015 - Modifié par vih-10 le 2/01/2015 à 17:58
mamiemando Messages postés 33140 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 7 juin 2024 - 3 janv. 2015 à 21:15
bonjour tout le monde

voilà

je voudrais écrire un programme (serveur) en c qui ouvre une Socket de type Unix/Stream pour écoute, le chemin vers la Socket doit être choisis de telle façon a éviter le besoin d'un compte possédant des droits de super-utilisateur.

pour tester le serveur, un programme (client) qui contactera le programme serveur a travers la Socket Unix ouverte par serveur et lui enverra un message "hello there !". le programme serveur lorsqu'il reçoit le message affiche la date et l'heure et répond ""hello overthere!".

l'environnement de travail: linux, gcc, man

si quelqu'un peut m'aider je lui serait éternellement reconnaissant

merci d'avance
A voir également:

1 réponse

mamiemando Messages postés 33140 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 7 juin 2024 7 756
3 janv. 2015 à 21:15
Disons que la question est un peu vague.

Ce qu'il faut savoir, c'est que sous linux, un socket se manipule comme un fichier (tu peux donc l'ouvrir, écrire dedans, lire dedans, et le fermer). Contrairement à windows, les sockets sont matérialisés par un fichier.

Un exemple concret de socket

Afin de t'expliquer un peu ce qui se passe, je vais illustrer mon propos au travers d'un exemple concret et réel : un serveur de base de donnée mysql. Le fichier
/var/run/mysqld/mysqld.sock
est le socket sur lequel écoute par défaut un serveur mysql sous debian. Dans cet exemple, le répertoire /var/run/mysqld appartient à l'utilisateur "mysql", et comme "mysql" est lancé par ce même utilisateur tout va bien.

Regardons maintenant un peu comment mysql est instancié :

(mando@velvet) (~) $ ps aux | grep mysql
...
mysql 1359 0.0 0.5 558148 47400 ? Sl 15:53 0:09 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
...


Comme tu le vois, mysql est lancé et lancé en prenant en paramètre le chemin de son fichier socket ainsi que le port sur lequel il écoute. Ce qu'on attend de toi dans ton exercice, c'est de faire de même : étant donnés un port et un chemin socket fourni en paramètre, on te demande d'ouvrir le port correspondant.

Si cela marche tu devrais être en mesure d'observer sur ta machine que ce port est ouvert :

(mando@velvet) (~) $ netstat -ntlp | grep 3306
(Tous les processus ne peuvent être identifiés, les infos sur les processus
non possédés ne seront pas affichées, vous devez être root pour les voir toutes.)
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -


Ouvrir un socket

Le mieux c'est maintenant de lire un cours :
http://sdz.tdct.org/sdz/les-sockets.html

... puis faire un tutoriel, par exemple celui ci, qui montre un exemple simple d'un client et d'un serveur :
https://www.thegeekstuff.com/2011/12/c-socket-programming/

Une fois que tu auras compris comment modifier cet exemple pour répondre à ton problème, passer par un fichier socket sera une formalité.

Bonne chance
0