[Resolu]Adaptation programme Windows vers Linux

Adaptation programme Windows vers Linux [Resolu] - C++ - Programmation

Marsh Posté le 06-07-2009 à 11:33:40    

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
Reply

Marsh Posté le 06-07-2009 à 11:33:40   

Reply

Marsh Posté le 06-07-2009 à 11:43:59    

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 !

Reply

Marsh Posté le 06-07-2009 à 11:47:31    

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

Reply

Marsh Posté le 06-07-2009 à 12:07:05    

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
Reply

Marsh Posté le 06-07-2009 à 12:10:32    

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.

Reply

Marsh Posté le 06-07-2009 à 12:21:25    

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++

Reply

Marsh Posté le 06-07-2009 à 12:25:27    

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

Reply

Marsh Posté le 06-07-2009 à 12:29:35    

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
Reply

Marsh Posté le 06-07-2009 à 18:59:22    

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

Reply

Sujets relatifs:

Leave a Replay

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