logo Homepage
+  NewbieContest
|-+  Programmation» Langages compilés» [C++] Les sockets, portables?
Username:
Password:
Pages: [1]
  Imprimer  
Auteur Fil de discussion: [C++] Les sockets, portables?  (Lu 4228 fois)
Mic32768
Profil challenge

Classement : 1031/54325

Membre Junior
**
Hors ligne Hors ligne
Messages: 67


Voir le profil
« le: 04 Octobre 2006 à 04:14:15 »

Salut,
je voulais savoir si il existe une librairie standard en C++ qui permet de manipuler les sockets qui compilera sur Linux et Windows. J'ai vu quelque chose du genre winsock mais c'est pas portable. Quelqu'un a-t-il une solution?
Journalisée
Nebelmann

Profil challenge

Classement : 464/54325

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1357


Voir le profil
« #1 le: 04 Octobre 2006 à 07:40:26 »

http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/socket.2.html
Journalisée

-- Nebelmann -- Registered linux user #429186
«Si les lecteurs étaient des compilateurs, les posteurs feraient peut-être davantage attention à ce qu'ils écrivent...»
Mic32768
Profil challenge

Classement : 1031/54325

Membre Junior
**
Hors ligne Hors ligne
Messages: 67


Voir le profil
« #2 le: 04 Octobre 2006 à 07:51:02 »

Merci!

C'est exactement ce que je cherchais
Journalisée
Mic32768
Profil challenge

Classement : 1031/54325

Membre Junior
**
Hors ligne Hors ligne
Messages: 67


Voir le profil
« #3 le: 04 Octobre 2006 à 07:55:34 »

Mmm j'ai essayé de compiler juste en incluant types.h et socket.h avec Visual Studio 2005 et il ne trouve pas socket.h

Faut-il le télécharger à part ou y faut absolument utiliser winsock?


Edit:
C'est bon j'ai trouvé, il faut inclure winsock absolument
Journalisée
Nebelmann

Profil challenge

Classement : 464/54325

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1357


Voir le profil
« #4 le: 04 Octobre 2006 à 22:45:05 »

euh c'est possible que ça ne marche pas avec les compilos de microsoft... ça doit être du POSIX, donc faut un gcc ou un mingw
Journalisée

-- Nebelmann -- Registered linux user #429186
«Si les lecteurs étaient des compilateurs, les posteurs feraient peut-être davantage attention à ce qu'ils écrivent...»
Invit
Invité
« #5 le: 05 Octobre 2006 à 06:11:18 »

Concernant la portabilité de code faut bien se dire que d'un OS à un autre, ça va engendrer du code en plus, c'est pas rigoureusement le même code que l'on compile à la fois pour windows et pour linux.

Pour être concret, sous windows avec l'api winsock2 on utilisera par exemple closesocket() tandis que sous linux les sockets de type Berkeley étant assimilées à des descripteurs de fichier standard, on fermera une socket avec un simple close() comme on ferme un fichier au niveau du système.
La solution c'est de mettre une ligne :
Code:
#define closesocket close
d'un coté où de l'autre de la portabilité, de manière que dans un cas, closesocket() existe, pas de problème, dans l'autre cas "closesocket" est remplacé à la pré-compilation par "close", et donc ça marche aussi...

Egalement une caractéristique de Winsock c'est qu'il faut l'initialiser avec WSAStartup(), chose dont on se fout éperduement avec les socket BSD.
De fait on shinte le bazar en insérant le code spécifique à windows à l'interieur de directives pré-processeur :
Code:
#ifdef __WIN32__
     WSADATA wsa;
     WSAStartup (MAKEWORD (2,2), &wsa);
#endif
et ce code là n'interresse pas le moins du monde le compilateur sous linux, de fait ce bout de code n'est effectivement compilé que lorsqu'on build sous windows, cqfd.

Sans doute mieux qu'un long discours, un exemple de code d'un client TCP portable Win/Lin ici.

BufferBob.
Journalisée
Mic32768
Profil challenge

Classement : 1031/54325

Membre Junior
**
Hors ligne Hors ligne
Messages: 67


Voir le profil
« #6 le: 05 Octobre 2006 à 09:22:09 »

Haha merci  , je vais enfin pouvoir m'adonner aux joies de la programmation réseau .

Mais quand même, j'aurais bien aimé que Microsoft utilise ce qui est standard, ce serait bien plus simple
Journalisée
lordOric

Profil challenge

non classé(e).

Membre Junior
**
Hors ligne Hors ligne
Messages: 50


Voir le profil
« #7 le: 05 Octobre 2006 à 12:36:29 »

Citation de: Mic32768
Mais quand même, j'aurais bien aimé que Microsoft utilise ce qui est standard, ce serait bien plus simple
Vaste débat.
Soyons sérieux, commercialement, c'est pas leur intérêt.

Ah ! Et il me semble que les windows (depuis 2000?) sont conformes POSIX.
Journalisée
Nebelmann

Profil challenge

Classement : 464/54325

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1357


Voir le profil
« #8 le: 05 Octobre 2006 à 20:36:18 »

Citation
Ah ! Et il me semble que les windows (depuis 2000?) sont conformes POSIX.
ce que tu dis m'étonnant un peu, et après rapide recherche, il apparaît que windows possède un sous-système POSIX :
http://en.wikipedia.org/wiki/Architecture_of_Windows_2000

mais bon... c'est pas encore çà
Journalisée

-- Nebelmann -- Registered linux user #429186
«Si les lecteurs étaient des compilateurs, les posteurs feraient peut-être davantage attention à ce qu'ils écrivent...»
Pages: [1]
  Imprimer  
 
Aller à: