Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1336 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  problème avec les sockets pour passer de windows a linux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème avec les sockets pour passer de windows a linux

n°1262902
TheShot
Posté le 09-12-2005 à 17:48:59  profilanswer
 

Salut !
Je suis en train de porter un programme windows vers linux qui utilise les sockets et les threads. Le programme fonctionne sous windows mais pas avec linux.
voici mes erreurs suivies d'un bout de code :
 
socketClient.cpp:20: erreur: « sockaddr_in » ne nomme pas un type
socketClient.cpp:21: erreur: « SOCKADDR_IN » ne nomme pas un type
socketClient.cpp:23: erreur: « WSADATA » ne nomme pas un type
socketClient.cpp: In constructor `clientProgram::clientProgram()':
socketClient.cpp:41: erreur: « MAKEWORD » non déclaré (première utilisation dans cette f onction)
socketClient.cpp:41: erreur: (Chaque identificateur non déclaré est rapporté seulement u ne seule fois pour la fonction dans laquelle il apparaît.)
socketClient.cpp:41: erreur: « MyWsaData » non déclaré (première utilisation dans cette fonction)
socketClient.cpp:41: erreur: « WSAStartup » non déclaré (première utilisation dans cette fonction)
socketClient.cpp: In member function `void clientProgram::readFile()':
socketClient.cpp:61: erreur: « sockInfoServer » non déclaré (première utilisation dans c ette fonction)
socketClient.cpp: In member function `void clientProgram::specificationsServer()':
socketClient.cpp:82: erreur: « sockInfoServer » non déclaré (première utilisation dans c ette fonction)
socketClient.cpp:82: erreur: « inet_addr » non déclaré (première utilisation dans cette fonction)
socketClient.cpp:85: erreur: « htons » non déclaré (première utilisation dans cette fonc tion)
socketClient.cpp:90: erreur: « SOCKADDR » non déclaré (première utilisation dans cette f onction)
socketClient.cpp:90: erreur: expected primary-expression avant un élément lexical « ) »
socketClient.cpp: In member function `void clientProgram::specificationsClient()':
socketClient.cpp:98: erreur: « sockInfoClient » non déclaré (première utilisation dans c ette fonction)
socketClient.cpp:98: erreur: « inet_addr » non déclaré (première utilisation dans cette fonction)
socketClient.cpp:101: erreur: « htons » non déclaré (première utilisation dans cette fon ction)
socketClient.cpp: In member function `void clientProgram::clientConnections()':
socketClient.cpp:115: erreur: « closesocket » non déclaré (première utilisation dans cet te fonction)
socketClient.cpp:116: erreur: « WSACleanup » non déclaré (première utilisation dans cett e fonction)

Code :
  1. //#include <winsock2.h>
  2. #include <pi-socket.h>
  3. #include <semaphore.h>
  4. #include <pi-sockaddr.h>
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <linux/socket.h>
  8. #include <iostream.h>
  9. #include <fstream.h>
  10. //#pragma comment(lib, "ws2_32.lib" )
  11. #define bufferLength 5
  12. class clientProgram
  13. {
  14. private :
  15. int mySocketServer;//used to define the server's socket
  16. int mySocketClient;//used to define the client's socket
  17. sockaddr_in sockInfoClient ;
  18. SOCKADDR_IN sockInfoServer ;//technical infos of the socket:
  19. //(port, éventually ip adress
  20. WSADATA MyWsaData; //used for WSAStartup in the constructor


 
 
comme vous pouvez le voir, j'ai aussi quelques problèmes pour trouver les bons include et pour savoir si WSADATA est propre a windows (si oui, quel est son "remplaçant" sous LINUX ?)


Message édité par TheShot le 09-12-2005 à 17:49:22
mood
Publicité
Posté le 09-12-2005 à 17:48:59  profilanswer
 

n°1264610
TheShot
Posté le 12-12-2005 à 15:33:29  profilanswer
 

up  :(

n°1264613
Profil sup​primé
Posté le 12-12-2005 à 15:34:14  answer
 

wsa est spécifique à windows (c'est windows socket 2 de microsoft donc non portable)
tu peux piocher dans wxwindows ou qt pour faire du socket multiOS
aussi la lib ACE http://www.cs.wustl.edu/~schmidt/ACE.html qui est bien puissante


Message édité par Profil supprimé le 12-12-2005 à 15:39:49
n°1264638
TheShot
Posté le 12-12-2005 à 15:58:20  profilanswer
 

Merci mais l'idéal pour moi serait de porter mon programme socket windows vers linux pour avoir un minimum de changements à faire. Pourriez vous m'éclairer sur les .h et notamment sur ce qui pourrait remplacer ceci sous linux :
 
WSAStartup(MAKEWORD(2,0), &MyWsaData);//do that we will use sockets,
 
  //the first parameter specify the winsock's  version  
 
  //which is a library which allow of using sockets  
 
  //the second parameter is used for the beginning of WSAStartup().
 
et pourquoi le type  
« sockaddr_in »
n'est pas reconnu ?
 
j'ai cette erreur avec :  
erreur: field ‘sockInfoClient’ has incomplete type
 
où ‘sockInfoClient’ est de type "struct sockaddr_in"


Message édité par TheShot le 12-12-2005 à 16:02:24
n°1264648
Profil sup​primé
Posté le 12-12-2005 à 16:09:08  answer
 

lol
il ne s'agit pas de ce qui t'arrange mais de ce qui est possible
la structure sockaddr_in est spécifique aux winsocks
déso mais tu vas être obligé de porter cqfd

n°1264653
TheShot
Posté le 12-12-2005 à 16:14:18  profilanswer
 

mince  :(  
merci pour l'info

n°1266343
Profil sup​primé
Posté le 14-12-2005 à 14:09:36  answer
 

d'ailleurs pendant que j'y pense tu dois porter les sockets mais zaussi les threads car c'est pas pareil entre windows et linux, tu t'adresses au système dans les deux cas. si tu n'as pas une couche qui abstrait l'interfaçage avec le système (ace,qt,wxwindows) tu dois réécrire ton code en partie tout du moins.


Message édité par Profil supprimé le 14-12-2005 à 14:11:39
n°1273423
Max334
Posté le 26-12-2005 à 19:12:22  profilanswer
 

pour les thread :
 
http://www.opengroup.org/onlinepub [...] ead.h.html
http://www.yolinux.com/TUTORIALS/L [...] reads.html
 
ensuite les sockets c'est plus simple sous linux mais ya pa smal d'includes à changer
 
 
http://gnosis.cx/publish/programming/sockets.html explication de la création client et serveur avec tout ce qu'il faut :
 
 
perso j'utilise :

Code :
  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <netinet/in.h>
  4. #include <arpa/inet.h>
  5. #include <unistd.h>
  6. #include <sys/un.h>


 
Et s'il en manque encore :

Code :
  1. <netdb.h>
  2. <resolv.h>


 

n°1273931
gocho
Posté le 28-12-2005 à 01:16:54  profilanswer
 


 
non , elle existe aussi sous linux...

n°1277647
Profil sup​primé
Posté le 05-01-2006 à 15:04:44  answer
 

gocho a écrit :

non , elle existe aussi sous linux...


 
oups
http://www.spi.ens.fr/~beig/systeme/sockets.html
ceci dit, même si tu gardes cette structure ( partie émergée de l'iceberg et pas grand chose dedans ) il va falloir adapter le reste


Message édité par Profil supprimé le 05-01-2006 à 15:08:28
mood
Publicité
Posté le 05-01-2006 à 15:04:44  profilanswer
 

n°1277650
theshockwa​ve
I work at a firm named Koslow
Posté le 05-01-2006 à 15:14:10  profilanswer
 

l'API winsock2 dispo sous windows est celle des berkeley sockets, il me semble, donc directement utilisable sous linux (d'ailleurs, je n'ai jamais eu à me soucier de ca pour mes projets cross platform du temps où j'en faisais encore, mise à part pour les WSA_Startup ou choses du genre pour initialiser ou fermer la lib) [:pingouino]

n°1277662
Profil sup​primé
Posté le 05-01-2006 à 15:35:27  answer
 

theshockwave a écrit :

l'API winsock2 dispo sous windows est celle des berkeley sockets, il me semble, donc directement utilisable sous linux (d'ailleurs, je n'ai jamais eu à me soucier de ca pour mes projets cross platform du temps où j'en faisais encore, mise à part pour les WSA_Startup ou choses du genre pour initialiser ou fermer la lib) [:pingouino]


euh les wsa machin truc ne servent pas qu'à initialiser et fermer la lib... tu écris que l'api winsock est directement utilisable sous linux sauf qu'il faut modifier quelques trucs à droite à gauche...  :heink:  

n°1277708
theshockwa​ve
I work at a firm named Koslow
Posté le 05-01-2006 à 17:07:57  profilanswer
 

j'ai pas dit à droite à gauche ... J'ai parlé d'init et de fermeture de la lib, chose que tu peux faire sur toute la durée de vie de ton programme, donc généralement hors de ta lib qui est en charge des sockets, dans un main spécifique à windows ou je ne sais quoi, je ne connais pas l'architecture que tu choisis sur tes projs, mais persos, mes sources pour libs de sockets (sous nux comme sous win) sont identiques

n°1277713
Profil sup​primé
Posté le 05-01-2006 à 17:33:35  answer
 

ça dépend comment le code est fait sans doute
j'ai d'autres appels spécifiques à WSA que l'init et la fermeture, pour l'asynchrone et la gestion d'erreurs notamment
mais j'imagine que si tu décorelles la partie WSA de la partie Berkeley il n'y a plus de problème de portage pour la partie Berkeley


Message édité par Profil supprimé le 05-01-2006 à 18:20:27
n°1277753
theshockwa​ve
I work at a firm named Koslow
Posté le 05-01-2006 à 18:55:03  profilanswer
 

oui, effectivement, j'avais oublié le problème des setsockopt permettant le mode asynchrone pour les sockets, au temps pour moi (et là, ce n'est pas du WSA)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  problème avec les sockets pour passer de windows a linux

 

Sujets relatifs
Inclure formulaire : probleme avec explorer mais pas firefoxProblème d'organisation et d'accès au données
Problème avec CommonDialog dans une classe 'MustInherit'Problème menu déroulant [self-résolu]
Equivalent de PHP Edit (0.8) sous Linux ?Problème pour faire marcher "xsl:when"
Rollover et Windows XP SP2passer un pointeur en parametre sans initialiser avant?
Quels outils pour passer de xml à html?[C / C++] le topic des bras cassés de la progue windows
Plus de sujets relatifs à : problème avec les sockets pour passer de windows a linux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR