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

  FORUM HardWare.fr
  Programmation
  C++

  [Resolu]Adaptation programme Windows vers Linux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu]Adaptation programme Windows vers Linux

n°1902593
thanks33
Posté le 06-07-2009 à 11:33:40  profilanswer
 

Bonjour, je souhaite adapter mon programme pour qu'il puisse etre compatible pour linux.
 

Code :
  1. #include <windows.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <iostream>
  5. #include <time.h>
  6. #include "multithreadimpl.h"
  7. #include <cstdlib>
  8. #include <fstream>
  9. using namespace std;
  10. #include <winsock2.h>
  11. #include <string>
  12. #include <limits>
  13. #include <MYSQL/mysql.h>
  14. #define __WIN__
  15. #include <sstream>
  16. using namespace std;
  17. int main(int argc, char* argv[]) //fonction principale du serveur acceptant les connections et activant les threads qui effectuent la réception
  18. {
  19.     WSADATA Wsa;                                 //
  20.     int erreur = WSAStartup(MAKEWORD(2,0), &Wsa);//active le module permettant l'utilisation des sockets
  21.     if(erreur!=0)//gestion d'erreur
  22.     {
  23.         cout<<"WSA n'a pas pu démarrer : erreur "<<erreur<<endl;
  24.         return EXIT_FAILURE;
  25.     }
  26.     sockaddr_in mysock;//structure définissant l'IP, le port et le protocole de ce serveur
  27.     SOCKET Socket;//le socket servant à la reception
  28.     int size=(int)sizeof(mysock);//taille nécessaire pour la suite
  29.     Socket = socket (AF_INET, SOCK_STREAM, 0);//ouvre une socket pour la reception
  30.     if(Socket==INVALID_SOCKET)//gestion d'erreur
  31.     {
  32.         cout<<"Erreur d' initialisation de la socket!"<<endl;
  33.         return EXIT_FAILURE;
  34.     }
  35.     else
  36.     cout<<"Socket ouverte en mode TCP/IP!"<<endl;
  37.     mysock.sin_addr.s_addr=htonl(INADDR_ANY);   //
  38.     mysock.sin_family=AF_INET;                  //définit les paramètres du socket
  39.     mysock.sin_port=htons(SERVEUR_PORT);        //
  40.     int sock_err = bind (Socket, (SOCKADDR *) &mysock, size);//associe les paramètres et le socket
  41.     if(sock_err==SOCKET_ERROR)//gestion d'erreur
  42.     {
  43.         cout<<"Erreur : Verifier que le port 23 n'est pas pris!"<<endl;
  44.         return EXIT_FAILURE;
  45.     }
  46.                      
  47.                       cout<< "Insertion reussi"<<endl;
  48.                       mysql_close(conn); /*fermeture de la connexion*/
  49.    
  50.     delete[]nomdefichier; /*suprésion du nom de fichier de la mémoire*/
  51.     closesocket(serveur->myfarsocket);//ferme la socket
  52.     cout<<"Connection avec "<<inet_ntoa(serveur->sin.sin_addr)<< " fermee!"<<endl;
  53.     memset(buffer, '\0', sizeof(buffer2)); /*on vide le buffer*/
  54.     delete serveur;     /*On suprime le nom du surveur de la mémoire*/
  55.     return 0;
  56. }


 
 
Malheureusement je n'y arrive pas.
 
Pouvez vous m'aider s'il vous plait?
 
Cordialement


Message édité par thanks33 le 10-07-2009 à 12:27:50
mood
Publicité
Posté le 06-07-2009 à 11:33:40  profilanswer
 

n°1902600
olivthill
Posté le 06-07-2009 à 11:43:59  profilanswer
 

Pas de chance.
 
La gestion des sockets est substantiellement différente sous Windows et sous Unix/Linux.
Par exemple sous Unix, il n'y a pas de #include <winsock2.h>, il n'y a pas de WSAStartup(), etc.
Il faudrait réécrire une bonne partie du programme.
 
Bon courrage !

n°1902606
thanks33
Posté le 06-07-2009 à 11:47:31  profilanswer
 

Merci pour ta réponce,
 
le probléme c'est que je n'arrive pas a faire fonctionné les pthread afin de gérer les différent utilisateur.
 
Si tu peu m'aiguiller, je suis preneur.
 
Cordialement

n°1902631
Amonchakai
Posté le 06-07-2009 à 12:07:05  profilanswer
 

Hello,
 
boost::thread est simple d'utilisation et portable :)
 
(d' ailleurs il y a aussi du boost pour la couche réseau... donc ça sera identique sous win et linux)
 
sinon, en ce qui conserne pthread, ce n'est pas super compliqué non  plus... Quel est ton problème ?


Message édité par Amonchakai le 06-07-2009 à 12:07:59
n°1902637
thanks33
Posté le 06-07-2009 à 12:10:32  profilanswer
 

Je n'arrive pas a faire créé mon thread a chaque fois que le client se connecte est du coup chaque client écrase les variable alors qu'il devrai se l'ai approprier.

n°1902646
Amonchakai
Posté le 06-07-2009 à 12:21:25  profilanswer
 

Hum, pas sur de comprendre... tu as un problème de mémoire partagé?  
 
A mon avis, je pense qu'il serai bien que tu regarde ce site: http://www.bien-programmer.fr/pthreads.htm  
(fait par quelqu'un d'ici de la cat C... car pthread, c'est du C...)
 
boost::thread c'est la solution propre en C++

n°1902648
Joel F
Real men use unique_ptr
Posté le 06-07-2009 à 12:25:27  profilanswer
 

boost::thread + boost::asio pr les sockets et tt le tintouin

n°1902650
thanks33
Posté le 06-07-2009 à 12:29:35  profilanswer
 

en réalité c'est un aplication client / serveur.
le client devra permettre la connexion de plusieurs serveur simultanément.
 
Ce que je n'arrive pas a faire c'est remplacer cette partie de mon programme (partie qui gere le multi thread)
 
ce code ci :
 
 

Code :
  1. #     while(1)
  2. #
  3. #     {
  4. #         Oasock=accept(Socket,(SOCKADDR*) &Oaaddr,&size);//accèpte une connection entrante
  5. #         cout<<"Connection d'un ordinateur au serveur a l'adresse : "<<inet_ntoa(Oaaddr.sin_addr)<<endl;//affiche l'IP du client connecté
  6. #         ServeurMulti *pointeur=new ServeurMulti;//création dynamique du paramètre envoyé au thread de serveur
  7. #         pointeur->myfarsocket=Oasock;//le socket qui s'est connecté
  8. #         pointeur->sin=Oaaddr;//ses paramètres
  9. #         CreateThread(NULL,NULL,ServeurThread, (LPVOID) pointeur, NULL, NULL);//démarrage du thread de reception des données
  10. #       
  11. #
  12. #     }
  13. #
  14. #     WSACleanup();//fonction symbolique (car normalement à un WSASartup doit être associé un WSACleanup mais bon celui là ne sera jamais utilisé :x...)


 
 
par des pthread afin de géré par la suite les connexion simultané de plusieurs serveur.
 
Le reste du programme est très simple a traduire.
 
Sa fait 1 semaine que je bloque sur c'est pthread.
 
Cordialement


Message édité par thanks33 le 07-07-2009 à 08:39:35
n°1902841
sligor
Posté le 06-07-2009 à 18:59:22  profilanswer
 

Boost ou QT pour des trucs portables avec les fils et les chaussettes


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

  [Resolu]Adaptation programme Windows vers Linux

 

Sujets relatifs
[RESOLU] Problème de vérouillage dans ma feuille excelSymbole externe non résolu sous Visual
[résolu] probleme fopen : php_network_getaddresses[Résolu]Pb trigger Mysql
RSH depuis linux vers Windows 2003 ...Suite de test avec JUnit[résolu]
[Resolu][Asp.NET][C#] Composants COM et serveur IIS[RESOLU] Qualité de l'impression
Plus de sujets relatifs à : [Resolu]Adaptation programme Windows vers Linux


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