C'est quoi un socket? Ou y a t-il un bon tutorial?
Slown
Messages postés37Date d'inscriptionlundi 14 mars 2005StatutMembreDernière intervention20 mai 2009
-
4 janv. 2006 à 20:14
Biting
Messages postés1Date d'inscriptiondimanche 10 octobre 2004StatutMembreDernière intervention12 février 2007
-
12 févr. 2007 à 13:56
Bien le bonjour! Je voudrais savoir a quoi servent les socket (ou winsock). J'voi partout des tutz sur ça mais on dit jamais a quoi ça sert concretement. Donc voila, si vous pouviez eclairer ma lanterne ça serait gantil. Un exemple concret serait appreciable. Sinon connaitriez vous des tutoriaux qui expliquent ce domaine de A à Z? Ou même un livre pourquoi pas?
J'vous remercie de votre attention, ciao, Slown.
send(sock, hello,strlen(hello), 0);//donc premier arg : la socket
utilisée , le 2eme ta variable (une chaine), 3 la longueur de celle ci
//et 4 bah laisse a 0... donc tu ajoute ces deux code et la tu envoie
un petit world a celui qui se connecte !!
maintenant recuperer le hello world :
pour cela il faut creer une socket mais serveur
WSADATA WSAData;//les memes ..
int stop=1;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKET csock;//atention j'en ai fait 2 !!
SOCKADDR_IN sin;
SOCKADDR_IN csin;// tjr 2
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_family = AF_INET;
sin.sin_port
= htons(240);// bon on se met sur le bon port (on
avait pris 240 )
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 4 janv. 2006 à 21:37
Salut,
rrk275> tu crois vraiment que paster des gros bouts de code brut
(sans explication, sans traitement d'erreur...) ca va l'aider à
apprendre les sockets ? il ne va rien comprendre et ca aura plutot
tendance à le dégouter.
cs_lacousine
Messages postés58Date d'inscriptionmardi 6 janvier 2004StatutMembreDernière intervention13 juillet 2007 4 janv. 2006 à 22:45
Exemple d'application ou tu pourrais te servir de socket.
Tu veux offrir de partager des fichiers ( .doc, .wav, .mp3 ...) avec d'autres utilisateurs. Tu te fais une grosse banque de données et tu permet le téléchargement via ton ordinateur à distance. Tu dois faire 2 programmes ... 1 est un serveur ( genre MSN ) et l'autre l'application qui se connecte à ton serveur ( le client que tu utilises pour parler sur MSN ). Ou une autre exemple que MSN... MIRC... on se connecte à toi ( le serveur MIRC ) et tout les clients se connecte et discute entre eux. Et oui tu peux faire un chat avec des sockets.
Moi j'aime bien comparer les sokets à des portes sur internet qui permettent d'avoir des informations. ... ou plutôt à des téléphones. Des gens appelent d'autre et échange entre eux. Ils peuvent échanger n'importe quel information.... texte, vocal, image et musique.
Et voilà mon explication de SOCKET.
Mieux vaut être blonde et poser des questions que de rester ignorante !!!!
Slown
Messages postés37Date d'inscriptionlundi 14 mars 2005StatutMembreDernière intervention20 mai 2009 5 janv. 2006 à 14:49
Merci a tous pour vos reponses. Je vais me lancer dans la programmation des socket, rrk275 m'a mis l'eau a la bouche. Et je pense qu'avec quelques tutz ça doit etre faisable. Merci a lacousine, qui ma eclairé et donnée des applications concretes ce qui m'a encore plus envie de m'y mettre. Merci encore, a+, Slown.
RemiONERA
Messages postés8Date d'inscriptionmercredi 11 janvier 2006StatutMembreDernière intervention 5 juin 2008 11 janv. 2006 à 14:40
Salut rrk275
Je suis tombé sur ton explication des Socket qui somme toute très
claire. Cependant je dois développer une application où un serveur
reçoit des données (tableaux de BYTE) de 7 clients au max et je dois
avouer qu'entre les CSocket, les CAsyncSock et les SOKET je me suis pas
mal perdu. Ma question est tout d'abord comment gère tu la reception
des données car dans ton exemple tu envois une chaine de caractère et
puis c'est fini. mais moi j'ai 7 clients qui vont m'envoyer des info et
si la fonction recv est bloquant je risque de perdre les infos
provenant des autres. J'ai bien pensé à creer un thread par client qui
lance une boucle d'attente de reception de données. Qu'en pense tu y a
t'il d'autres solutions?
Il y a des jours ou je maudit franchement micosoft
Cordialement Rémi
rrk275
Messages postés540Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 1 octobre 20072 11 janv. 2006 à 15:25
Vu que recv est bloquant , il y a pas d'autre moyen... (a moin de (jamais essayé ...) connecter tout le monde sur le meme socket... mais je sais pas si on peut .... )
RemiONERA
Messages postés8Date d'inscriptionmercredi 11 janvier 2006StatutMembreDernière intervention 5 juin 2008 11 janv. 2006 à 15:28
Pour le tutoriel sur www.developpez.com peux tu être plus précis car
j'ai fouillé un peu sur ce site et je n'ai pas trouvé grand chose. Pour
ce qui est du recv je suis en train d'essayé je te tiendrais au courant
Il y a des jours ou je maudit franchement micosoft
Cordialement Rémi
cs_lacousine
Messages postés58Date d'inscriptionmardi 6 janvier 2004StatutMembreDernière intervention13 juillet 2007 11 janv. 2006 à 20:01
tu peux te créer un thread qui fait juste accepter des connexions, à cette endroit tu peux te garder une variable membre à ta classe pour compter le nombre de connexion. Un coup une connexion acceptée tu dois partir un thread pour ce nouveau client et conserver l'état du socket obtenu par le accept ( ). Tu as le choix de garder une trace de toute connexion établie dans un tableau.
exemple : (ps le code n'est pas testé... mais au moins vous avez la ligne générale.)
int m_iNbClient = 0;
bool m_bFermetureServeur = false;
void AccepterConnexion( )
{
while ( !m_bFermetureServeur )
{
// vérifie si le nombre maximum de client n'est pas atteind
// le nombre demandé est 7 et l'initialisation de la variable commence à 0 et non 1
// donc 7-1=6
if ( m_iNbClient < 6 )
{
// attendre une connexion d'un client
accept( );
/* récupérer le socket du client, afin de le passer en paramètre à un thread
Moi, je me suis créée une classe CUnThread qui prend en paramètre
le socket du client et ainsi que plusieurs autre paramètre. Pourquoi ? Dans ma classe, je gère toutes les informations recues ou envoyées par un client... et je gère sa déconnexion au serveur. De plus, vu que nous sommes dans un WHILE la valeur du socket sera perdu, lorsqu'un nouveau client se connectera.
Autre solution : mettre la valeur du socket dans un tableau, de cette façon vous allez pouvoir contrôler la déconnexion au serveur ou même de forcer la déconnexion d'un client ou de tout les clients.
*/
// incrémenter le nombre de client connecté
++m_iNbClient;
}// fin du if
}// fin du while
}
et voila une petite explication :D
Mieux vaut être blonde et poser des questions que de rester ignorante !!!!
RemiONERA
Messages postés8Date d'inscriptionmercredi 11 janvier 2006StatutMembreDernière intervention 5 juin 2008 5 avril 2006 à 15:49
Merci pour ces adresses je les avaient trouvées il y a peu et ça m'a bien dépanné et j'ai pu développer mon application .
Effectivement il y a un moteur de recherche sur developpez.com mais
hélas il me renvoit très souvent à des rubriques JAVA ou Pascal (Delphi). En plus je n'ai pas toujours la possibilité de faire des fouilles approfondies.
Par contre j'ai un peu fouillé partout et j'ai trouvé quelques truc
mais aucun de vraiment satisfaisant pour récupérer soit l'identité
réseau du PC ou son adresse IP. Si quelqu'un a des infos
Il y a des jours ou je maudit franchement micosoft
Cordialement Rémi
Biting
Messages postés1Date d'inscriptiondimanche 10 octobre 2004StatutMembreDernière intervention12 février 2007 12 févr. 2007 à 13:56
Il est possible de se mettre en écoute de plusieurs sockets (clients) à paritr d'un seul thread et sans être gêné par des appels bloquants grâce à la fonction "select" qui permet de se mettre en attente d'événements avec timeouts. J'y ai consacré un tutoriel complet disponible à l'adresse suivante : http://www.quantic-storm.com/qs/index.php?menu=Community&sm0=Sockets&language=FR