IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Socket sous Linux & Windows


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Socket sous Linux & Windows
    Salut,

    Voila je cherche de partout comme un dingue depuis un bon moment un tuto sur le dev de Socket qui marcherais sous Windows & Linuxen touchant l moins possible au code source.

    J'ai trouver quelque exemple du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    #include <stdio.h>
    #include <winsock2.h>
    #pragma comment(lib, "ws2_32.lib")
     
    /***************************************************************************************************************************/
    /***************************************************************************************************************************/
    /***************************************************************************************************************************/
     
    #define WM_SOCKET	WM_USER+100
     
    /***************************************************************************************************************************/
    /***************************************************************************************************************************/
    /***************************************************************************************************************************/
     
    SOCKET Sock;
    SOCKADDR_IN C_adresse;	// adresse de la cible de la communication
    WSADATA WSAData;
    int Res;
     
    /***************************************************************************************************************************/
    /***************************************************************************************************************************/
    /***************************************************************************************************************************/
     
    bool Connexion(void)
    {
    	if((Res = WSAStartup(MAKEWORD(2,2), &WSAData)) != 0)
    	{
    		//DisplayErreur("Initialisation de WSA impossible !", 0);		
    		return false;
    	}
    	else
    	{
    		Sock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
     
    		C_adresse.sin_family = AF_INET;
    		C_adresse.sin_port = htons(6073);
    		C_adresse.sin_addr.s_addr = inet_addr("127.0.0.1");
     
    		Res = connect(Sock, (SOCKADDR *)&C_adresse, sizeof(C_adresse));
     
    		if(Res!=0)
    		{
    			//DisplayErreur("Connexion au serveur impossible !", 0);
    			return false;
    		} 
    	}
     
    	return true;
    }
     
    /***************************************************************************************************************************/
    /***************************************************************************************************************************/
    /***************************************************************************************************************************/
     
    void main()
    {
    	char *buffer = new char[255];
     
    	Connexion();
     
    	recv(Sock, buffer, sizeof(buffer), 0);
     
    	printf("%s\n", buffer);
     
    	closesocket(Sock);
    	WSACleanup();
    }
     
    /***************************************************************************************************************************/
    /***************************************************************************************************************************/
    /***************************************************************************************************************************/
    Il se connect bien (pas encore testé sous linux mais ont me dis que sa devrait marcher si j'enlève les tous les "WSA").

    Par contre en ce qui concerne le recv() j'ai un problème, dès qu'il à recut un message il passe à la ligne en dessous et ferme le programme.

    Comment faire pour qu'il réceptionne en continue, sans sortir du recv() et sans bloquer le reste du programme.

    Merci pour votre aide.

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Pour du code portable sans problème , regarde ici :
    http://emmanuel-delahaye.developpez.com/reseaux.htm

    C'est ton code mais en portable.

    Pour le reste , je ne sais pas

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Points : 30
    Points
    30
    Par défaut
    bon je voie une énormité dans ce que l'on ta dis sur le portage d'un programme socket WIN32 --> linux

    deja sous linux tu trouvera pas : winsock2.h ( mise a part si tu utilise une lib de portage du genre de Kylix, il me semble qu'il l'on mit )
    le fichier similaire est : sys/socket.h

    mise a par cela nativement C je parle sous linux :
    SOCKADDR_IN n'existe pas c'est : 'struct sockaddr_in *' qui est utilisé
    je vais pas toute te les lister mais en socket, le portage WIN32 est pas si simple.

    je sais pas qui ta dis qu'en enlevant simplement les WSA avant les noms de fonction mais il c'est bien planté ...
    si tu veux rendre ton program compatible utilise les macro et les:
    #if __WIN32
    ...
    #else /*pour linux */

    #endif

    et aussi le #pragma ne fonctionnera pas sous linux .lib n'existe pas ..

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Merci pour vos réponse,

    J'ai vu qu'il éxistait des lib toute faire comme GNet mais je n'arrive pas à m'en servire.

    Vous avez des conseils ?

Discussions similaires

  1. [Free Pascal] GLScene : est-ce possible (sous Linux ET Windows) ?
    Par I_am_root dans le forum Free Pascal
    Réponses: 3
    Dernier message: 10/12/2007, 15h33
  2. Serveur mysql sous linux ou Windows?
    Par gnaoui_9999 dans le forum Installation
    Réponses: 5
    Dernier message: 11/10/2006, 14h28
  3. Problème erreurs sockets sous Linux
    Par Ange44 dans le forum Linux
    Réponses: 6
    Dernier message: 05/09/2006, 17h16
  4. Ethernet sous Linux et Windows
    Par Invité4 dans le forum Réseau
    Réponses: 9
    Dernier message: 17/04/2005, 12h19
  5. Etat de la pile sous Linux et Windows
    Par Bibouda dans le forum x86 32-bits / 64-bits
    Réponses: 7
    Dernier message: 16/02/2003, 02h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo