Les Sockets Windows

Les Sockets Windows - C++ - Programmation

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 ;)

Reply

Marsh Posté le 28-01-2004 à 13:29:16   

Reply

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

Reply

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 :p
merci

Reply

Marsh Posté le 28-01-2004 à 13:42:24    

WSAStartup pour l'init, je crois

Reply

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)


Message édité par blackgoddess le 28-01-2004 à 14:53:17

---------------
-( BlackGoddess )-
Reply

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 :)

Reply

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.

Reply

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


Message édité par SoWhatIn22 le 30-01-2004 à 14:05:47
Reply

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...
Par contre, j'aimerais savoir pour quelle raison vous conseillez d'utiliser Winsock 1.1 et pas 2.0


 
Parceque l'API Winsock 1.1 ressemble beaucoup aux sockets Unix et que l'API Winsock 2.0 non.

Reply

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 :
  1. #include <winsock2.h>
  2. #pragma  comment(lib,"ws2_32.lib" )


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?

Reply

Marsh Posté le 30-01-2004 à 15:02:05   

Reply

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.

Reply

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 :)

Reply

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
libcurl is a free and easy-to-use client-side URL transfer library, supporting FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE and LDAP. libcurl supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, kerberos, HTTP form based upload, proxies, cookies, user+password authentication, file transfer resume, http proxy tunneling and more!  
libcurl is highly portable, it builds and works identically on numerous platforms, including Solaris, Net/Free/Open BSD, Darwin, HPUX, IRIX, AIX, Tru64, Linux, Windows, Amiga, OS/2, BeOs, Mac OS X, Ultrix, QNX, OpenVMS, RISC OS and more...  
 
libcurl is thread-safe, IPv6 compatible and fast.  
 
This whole section of the curl web site is dedicated to libcurl, and it contains detailed information on how to use libcurl in your own applications using your prefered programming language. Checkout the Ada95, Basic, C, C++, Cocoa, Dylan, Euphoria, Ferite, Java, Lua, Object-Pascal, O'Caml, Pascal, Perl, PHP, PostgreSQL, Python, Rexx, Ruby, Scheme and Tcl bindings.


 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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/ )
 
J'en profite pour faire de la pub a cette lib que je trouve tres utile:

Citation :


...


 
A+,


 
:love:
Merci gilou, je cherchais une telle bibliothèque qui soit vraiment libre !


---------------
Un matin je me lèverai et il fera beau.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed