Les Sockets Windows - C++ - Programmation
Marsh Posté le 28-01-2004 à 13:30:52
Utilises Winsocks mais pas la dernière version : pas Winsocks 2.0 je crois. Après, la seule difference avec les sockets Unix je crois est que tu dois appeler une fonction d'initialisation.
Pour la doc : MSDN
Marsh Posté le 28-01-2004 à 13:33:23
Bah justement dans la MSDN je n'avait trouvé que CSocket ... mais bon je vais mater plus en détails Winsocks ...
Souhaite moi bonne chance
merci
Marsh Posté le 28-01-2004 à 14:52:05
utilise les windows socket 1.1
#include <winsock.h>
initialisation : WSADATA wsaData; WSAStartup (MAKEWORD(1,1), &wsaData);
cleanup : WSACleanup();
sinon sous linux les sockets sont des int, sous windows les sockets sont des SOCKET
sous linux tu peux utiliser write et read, sous windows tu dois rester à send et recv
sinon, le reste de l'api est a peu pret semblable.
http://msdn.microsoft.com/library/ [...] ctions.asp
(CSocket c'est la classe qui encapsule l'api socket dans les MFC)
Marsh Posté le 29-01-2004 à 13:19:22
Bah sous unix un socket t'ouvre un descripteur de fichier ...
Sous windows j'aurait pensé que ça aurait utilisé un FILE* mais apparement non..
Enfin bon merci pour la doc et les infos
Marsh Posté le 30-01-2004 à 13:35:58
Sous Windows, le type du descripteur est SOCKET (enfin ce que je sais de Winsock2) et sous linux c'est int.
Marsh Posté le 30-01-2004 à 14:05:14
oui et non. En pratique, une fois la socket ouverte, on peut la mapper sur un flux et utiliser les fonctions "classiques" de lecture et écriture (comme avec un FILE*). Evidemment, on utilise pour cela des fonctions bien spécifiques...
Par contre, j'aimerais savoir pour quelle raison vous conseillez d'utiliser Winsock 1.1 et pas 2.0
Marsh Posté le 30-01-2004 à 14:47:25
SoWhatIn22 a écrit : oui et non. En pratique, une fois la socket ouverte, on peut la mapper sur un flux et utiliser les fonctions "classiques" de lecture et écriture (comme avec un FILE*). Evidemment, on utilise pour cela des fonctions bien spécifiques... |
Parceque l'API Winsock 1.1 ressemble beaucoup aux sockets Unix et que l'API Winsock 2.0 non.
Marsh Posté le 30-01-2004 à 15:02:05
j'ai peur de dire une bêtise, mais c'est à dire?
je veux dire par là que il me semble bien utiliser winsock2
Code :
|
et pourtant j'utilise les fonctions socket, send, sendto, recv, recvfrom, setsockopt, et les macros classiques FD_ZERO, FD_ISSET, etc... et le tout sans aucun problème.
On parle des mêmes fonctions ou pas?
Marsh Posté le 30-01-2004 à 15:30:38
Pareil, je comprends pas le pb initial. Winsock 2 supporte la quasi totalité des fonctions socket standards.
En outre, je viens de coder un programme qui utilise toutes les fonctions socket standard sous Win32 avec la libriarie winsock2.2.... la seule petite différence se situe au niveau de l'appel de WSAStartup/Cleanup en début et fin de programme bien spécifique à Win32. Sinon le code est portable sous Win32 et Linux.
PS: une autre petite diff : close est remplcé par closesocket sous Win32.
Bon courage,
Xter.
Marsh Posté le 30-01-2004 à 15:39:50
Oui et la lib en supporte beaucoup qui ne sont pas portables. Et si vous n'utilisez pas les fonctions ajoutées, vous vous retrouvez à utiliser une API compatible Winsock 1.2
Marsh Posté le 30-01-2004 à 16:01:59
Tu peux aller jeter voir comment c'est fait dans la partie windows specifique de libcurl ( http://curl.haxx.se/libcurl/ )
J'en profite pour faire de la pub a cette lib que je trouve tres utile:
Citation : libcurl - a multiprotocol file transfer library |
A+,
Marsh Posté le 30-01-2004 à 17:44:47
gilou a écrit : Tu peux aller jeter voir comment c'est fait dans la partie windows specifique de libcurl ( http://curl.haxx.se/libcurl/ )
|
Merci gilou, je cherchais une telle bibliothèque qui soit vraiment libre !
Marsh Posté le 28-01-2004 à 13:29:16
Voilà j'ai cherché un peu partout, mais j'ai pas trouvé ce que je cherché.
J'ai travaillé les Sockets en C sous linux en cours.
Il se trouve que c'est plutot bien foutu, et du coup je voudrais faire des tests chez moi avec Windows ...
Seulement, j'ai pas réussi à trouver les équivalent sous Windows, je suis bien tombé sur des docs vagues sur la classe CSocket mais ça n'as pas vraiment de rapport avec les socket sous linux (ca utilise des classe de flux de données etc... pourquoi faire simple quand on peut faire compliquer quoi lol).
Je voulais donc savoir comment on peut programmer des sockets sous windows de la meme manière que sous unix ?
Quelle librairie etc...
P.S: J'viens de faire un autre post, mais comme les sujets n'ont pas vraiment de rapport j'ai préféré les poster séparement