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

Développement Discussion :

Serveur en C et client C#


Sujet :

Développement

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 66
    Points : 34
    Points
    34
    Par défaut Serveur en C et client C#
    Bonjour,

    Je développe actuellement un serveur en C via une machine virtuelle dans laquelle est installé une version de linux debian.

    Voici une partie du code de mon serveur :
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <pthread.h>
    #include <sys/types.h> 
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <netdb.h>
    #include <mqueue.h>
    #include "main.h"
    
    #define NB_CLIENT_MAX 5
    #define TAILLE_MESSAGE 256
    #define MYPORT "8001"
    
    int clients_adresses[NB_CLIENT_MAX];/*Permet de stocker les clients actuellement connectes*/
    pthread_t clients_threads_data[NB_CLIENT_MAX];/*Permet de stocker les  threads Data*/
    pthread_t clients_threads_maj_jdb[NB_CLIENT_MAX];/*Permet de stocker les threads maj jdb*/
    
    /* Routine des Threads */
    static void *serveurMajJdbThread (void *);
    static void *serveurDataThread (void *);
    
    
    void Erreur(const char *msg)
    {
    	perror(msg);
    }
    
    void AjouterClient(int adresse)
    {
    	int ajoute = 0;
    	int i = 0;
    	for(i = 0; i<NB_CLIENT_MAX; i++)
    	{
    		if(clients_adresses[i] == 0)
    		{/*Si ya une place dispo on ajoute le nouveau client*/
    			clients_adresses[i] = adresse;
    
    			pthread_t serveur_maj_jdb, serveur_data;
    			pthread_create (&serveur_maj_jdb,    NULL, &serveurMajJdbThread,    (void *) i);
    			pthread_create (&serveur_data, NULL, &serveurDataThread, (void *) i);
    
    			clients_threads_data[i] = serveur_data;
    			clients_threads_maj_jdb[i] = serveur_maj_jdb;
    
    			envoyerMessage(adresse, "connexion");
    			ajoute = 1;
    		}
    	}
    
    	if(!ajoute)
    	{
    		Erreur("Plus de place disponible pour toi Jack");
    	}
    }
    
    
    void CreationThreadsServeurs(int adresse)
    {
    
    
    	/*Ajoute le client a la liste*/
    	AjouterClient(adresse);
    }
    static void threadDataDispatcher (char* buffer, int newsockfd);
    static void executerThreadData(long index_client)
    {
    	int newsockfd,n;
    	char buffer[256];
    
    	newsockfd = clients_adresses[index_client];
    	bzero(buffer,TAILLE_MESSAGE);
    	/*ecoute des messages du client*/
    	while((n = read(newsockfd,buffer,TAILLE_MESSAGE)))
    	{
    		if (n < 0)
    		{
    			Erreur("ERROR reading from socket");
    		}else{
    			printf("Message reçu: %s\n",buffer);
    			threadDataDispatcher(buffer, newsockfd);//On appelle la fonction qui s'occupe de déchiffrer ça
    		}
    	}
    
    }
    
    // --- MAIN --- //
    
    void *ServeurConnexionThread (void * args)
    {
    	printf("Demarrage du serveur en cours \n");
    	int i =0;
    	int sockfd, newsockfd,n;
    	int port_numero = NB_PORT_SOCKET_A;
    	socklen_t client_taille;
    	char buffer[256];
    	struct sockaddr_in serv_adresse, cli_addr;
    
    	/*Initialisation des clients	 */
    	for(i=0; i<NB_CLIENT_MAX; i++)
    	{
    		clients_adresses[i] = 0;
    	}
    
    
    	/*Configuration du serveur*/
    
    	int errcode;
    	    socklen_t addr_size;
    	    int* new_fd;
    	    void*buf;
    	    int taskid;
    	    sleep(1);
    	    struct addrinfo hints, *res, *p;
    	    memset(&hints, 0, sizeof hints);
    	    hints.ai_family = AF_UNSPEC;  // use IPv4 or IPv6, whichever
    	    hints.ai_socktype = SOCK_STREAM;
    	    hints.ai_flags = AI_PASSIVE;     // fill in my IP for me
    
    	    getaddrinfo(NULL, MYPORT, &hints, &res);
    
    	    // make a socket:
    
    	    sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
    
    	    // bind it to the port we passed in to getaddrinfo():
    
    	    bind(sockfd, res->ai_addr, res->ai_addrlen);
    
    	    // now accept an incoming connection:
    	    listen(sockfd,NB_CLIENT_MAX);
    
    
    
    	client_taille = sizeof(cli_addr);
    
    	printf("Serveur : Attente de clients en cours \n");
    	/*Attente d'un nouveau client*/
    	while(newsockfd = accept(sockfd,
    			(struct sockaddr *) &cli_addr,
    			&client_taille))
    	{
    		printf("Nouveau client détecté");
    		/*Nouveau client détecté*/
    		if (newsockfd < 0)
    		{
    			Erreur("ERROR on accept");
    		}else{
    			bzero(buffer,256);
    			n = read(newsockfd,buffer,255);
    			if (n < 0)
    			{
    				Erreur("ERROR reading from socket");
    			}else{
    				CreationThreadsServeurs(newsockfd);/*On a bien recu le message du client alors on cree le client*/
    			}
    		}
    	}
    
    
    	/*Fermeture du serveur*/
    	close(sockfd);
    
    }
    Une fois lancé j'ai plus d'erreur et la commande netstat -ntulp me renvoie ceci que 0.0.0.0:8001 est en mode listen (le 0.0.0.0 me pose un peu problème)
    J'ai regardé les ports en mode listen et mon port 8001 est bien dedans.

    Coté client désormais :
    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
    public static Socket sock;
            static String address = "192.168.56.1"; //TODO
            static int port = 8001;
            static int TAILLEMSG = 256;
            static Client_IHM parent;
    
            /// <summary>
            /// Méthode du thread client-serveur
            /// </summary>
            /// <param name="obj"></param>
            public static void routine(Object obj)
            {
                try
                {
                    parent = (Client_IHM) obj;
                    sock = new Socket(
                        AddressFamily.InterNetwork,
                        SocketType.Stream,
                        ProtocolType.Tcp);
    
                    IPEndPoint iep = new IPEndPoint(IPAddress.Parse(address), port);
                    sock.Connect(iep);
    
                    //boucle d'ecoute
                    byte[] buffer = new byte[TAILLEMSG];
                    int n = 0;
                    while ((n = sock.Receive(buffer, 0, buffer.Length, SocketFlags.None)) > 0)
                    {
                        dispatcher(buffer);
                    }
    
                }
                catch (Exception e)
                {
                    Client_IHM.AfficherMessage("erreur survenue à la création du thread data client:"+e.Message);
                }
            }

    Et j'ai une erreur à la connexion du client : Aucune connexion n'a pu etre établie car l'ordinateur cible l'a expressement refusée.

    Mon soucis principal (avant de penser à des problèmes de code) est le suivant :
    Sur quelle adresse IP mon client doit-il se connecter ? (celle qui est associée à la carte réseau de VirtualBox sous Windows 192.168.56.1, celle associée à ma carte wifi sous windows, celle associée à localhost sous linux : 127.0.0.1 etc).

    Dans tous les cas le serveur ne rentre jamais dans la boucle.

    Quand je serais sur de l'adresse ip à utiliser j'aurais peut etre plus de chances de trouver le problème de mon code.

    Pour info j'ai essayé de me connecter sans le client (telnet 192.168.56.1 8001 depuis windows) et cela ne fonctionne pas non plus. D'ou peu venir le soucis ? (Je suis sous windows 8) : Impossible d'ouvrir une connexion à l'hote.

    J'ai désactivé le pare feu de windows et désactivé avast sans succès.

    Cependant j'ai fais telnet 0.0.0.0:8001 depuis linux (dans la virtualbox) et ça fonctionne (en tout cas le serveur détecte la connexion). Donc le problème est la synchro entre ma machine virtuelle et mon windows.

    Le problème serait donc un soucis de configuration de virtualbox non ? J'ai essayé le mode bridged ajouté au mode NAT (comme indiqué sur internet) mais sans succès particulier...
    J'ai toujours 0.0.0.0:8001 comme adresse utilisée quand je fais netstat -ntulp, normal ?

    Merci d'avance,

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par PigKey6 Voir le message
    Une fois lancé j'ai plus d'erreur et la commande netstat -ntulp me renvoie ceci que 0.0.0.0:8001 est en mode listen (le 0.0.0.0 me pose un peu problème)
    J'ai regardé les ports en mode listen et mon port 8001 est bien dedans.
    le 0.0.0.0 signifie tout simplement que ton port 8001 est bindé à toutes les interfaces réseau de ta machine. C'est donc tout bon, pas de pb de ce côté là.


    Citation Envoyé par PigKey6 Voir le message
    Sur quelle adresse IP mon client doit-il se connecter ? (celle qui est associée à la carte réseau de VirtualBox sous Windows 192.168.56.1, celle associée à ma carte wifi sous windows, celle associée à localhost sous linux : 127.0.0.1 etc).
    A priori, c'est l'interface VirtualBox qu'il faut utiliser (192.168.56.1).

    est ce que l'on peut avoir les résultats de "ipconfig /all" sur ton PC et le "ifconfig -a" sur ta virtual box

    est ce que depuis ton PC, tu peux pinguer ta machine virtuelle. Tant que ce test ne passera pas, pas la peine de se plonger dans le code.

    Quelle type d'interface réseau tu utilises pour ta machine virtuelle :
    • Not attached
    • NAT
    • Bridged adapter
    • Internal network
    • Host-only adapter
    • Generic friver
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    Voici le résultat de ipconfig /all
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    ipconfig /all
    
    Configuration IP de Windows
    
       Nom de l'hôte . . . . . . . . . . : José
       Suffixe DNS principal . . . . . . :
       Type de noeud. . . . . . . . . .  : Hybride
       Routage IP activé . . . . . . . . : Non
       Proxy WINS activé . . . . . . . . : Non
    
    Carte réseau sans fil Connexion au réseau local* 11*:
    
       Statut du média. . . . . . . . . . . . : Média déconnecté
       Suffixe DNS propre à la connexion. . . :
       Description. . . . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapt
    er
       Adresse physique . . . . . . . . . . . : 84-4B-F5-87-D3-28
       DHCP activé. . . . . . . . . . . . . . : Oui
       Configuration automatique activée. . . : Oui
    
    Carte Ethernet Ethernet :
    
       Statut du média. . . . . . . . . . . . : Média déconnecté
       Suffixe DNS propre à la connexion. . . :
       Description. . . . . . . . . . . . . . : Realtek PCIe GBE Family Controller
       Adresse physique . . . . . . . . . . . : 50-46-5D-2F-F1-55
       DHCP activé. . . . . . . . . . . . . . : Oui
       Configuration automatique activée. . . : Oui
    
    Carte réseau sans fil Wi-Fi*:
    
       Suffixe DNS propre à la connexion. . . :
       Description. . . . . . . . . . . . . . : 802.11n Wireless LAN Card
       Adresse physique . . . . . . . . . . . : 84-4B-F5-87-D3-2E
       DHCP activé. . . . . . . . . . . . . . : Oui
       Configuration automatique activée. . . : Oui
       Adresse IPv6 de liaison locale. . . . .: fe80::d42:14bc:3ccb:508e%12(préféré)
    
       Adresse IPv4. . . . . . . . . . . . . .: 192.168.1.60(préféré)
       Masque de sous-réseau. . . .*. . . . . : 255.255.255.0
       Bail obtenu. . . . . . . . .*. . . . . : lundi 10 décembre 2012 18:51:01
       Bail expirant. . . . . . . . .*. . . . : mardi 11 décembre 2012 18:51:01
       Passerelle par défaut. . . .*. . . . . : 192.168.1.1
       Serveur DHCP . . . . . . . . . . . . . : 192.168.1.1
       IAID DHCPv6 . . . . . . . . . . . : 260328437
       DUID de client DHCPv6. . . . . . . . : 00-01-00-01-17-F2-9D-EF-84-4B-F5-87-D3
    -2E
       Serveurs DNS. . .  . . . . . . . . . . : 192.168.1.1
       NetBIOS sur Tcpip. . . . . . . . . . . : Activé
    
    Carte Ethernet VirtualBox Host-Only Network :
    
       Suffixe DNS propre à la connexion. . . :
       Description. . . . . . . . . . . . . . : VirtualBox Host-Only Ethernet Adapte
    r
       Adresse physique . . . . . . . . . . . : 08-00-27-00-44-BA
       DHCP activé. . . . . . . . . . . . . . : Non
       Configuration automatique activée. . . : Oui
       Adresse IPv6 de liaison locale. . . . .: fe80::f581:9051:384b:1a2c%22(préféré
    )
       Adresse IPv4. . . . . . . . . . . . . .: 192.168.56.1(préféré)
       Masque de sous-réseau. . . .*. . . . . : 255.255.255.0
       Passerelle par défaut. . . .*. . . . . :
       IAID DHCPv6 . . . . . . . . . . . : 621281319
       DUID de client DHCPv6. . . . . . . . : 00-01-00-01-17-F2-9D-EF-84-4B-F5-87-D3
    -2E
       Serveurs DNS. . .  . . . . . . . . . . : fec0:0:0:ffff::1%1
                                           fec0:0:0:ffff::2%1
                                           fec0:0:0:ffff::3%1
       NetBIOS sur Tcpip. . . . . . . . . . . : Activé
    
    Carte Tunnel Reusable Microsoft 6To4 Adapter :
    
       Suffixe DNS propre à la connexion. . . :
       Description. . . . . . . . . . . . . . : Microsoft 6to4 Adapter
       Adresse physique . . . . . . . . . . . : 00-00-00-00-00-00-00-E0
       DHCP activé. . . . . . . . . . . . . . : Non
       Configuration automatique activée. . . : Oui
       Passerelle par défaut. . . .*. . . . . :
       NetBIOS sur TCPIP. . . . . . . . . . . : Désactivé
    
    Carte Tunnel Teredo Tunneling Pseudo-Interface :
    
       Statut du média. . . . . . . . . . . . : Média déconnecté
       Suffixe DNS propre à la connexion. . . :
       Description. . . . . . . . . . . . . . : Teredo Tunneling Pseudo-Interface
       Adresse physique . . . . . . . . . . . : 00-00-00-00-00-00-00-E0
       DHCP activé. . . . . . . . . . . . . . : Non
       Configuration automatique activée. . . : Oui
    
    Carte Tunnel Reusable ISATAP Interface {00014769-6A95-40DC-8598-455D27442F30} :
    
       Suffixe DNS propre à la connexion. . . :
       Description. . . . . . . . . . . . . . : Carte Microsoft ISATAP
       Adresse physique . . . . . . . . . . . : 00-00-00-00-00-00-00-E0
       DHCP activé. . . . . . . . . . . . . . : Non
       Configuration automatique activée. . . : Oui
       Passerelle par défaut. . . .*. . . . . :
       NetBIOS sur TCPIP. . . . . . . . . . . : Désactivé
    
    Carte Tunnel isatap.{F903F071-BA9B-4815-8097-A06053B01898} :
    
       Statut du média. . . . . . . . . . . . : Média déconnecté
       Suffixe DNS propre à la connexion. . . :
       Description. . . . . . . . . . . . . . : Carte Microsoft ISATAP #2
       Adresse physique . . . . . . . . . . . : 00-00-00-00-00-00-00-E0
       DHCP activé. . . . . . . . . . . . . . : Non
       Configuration automatique activée. . . : Oui
    
    Carte Tunnel Reusable ISATAP Interface {C22A08C9-EE4A-4CCA-BDCA-D2320CD11AB8} :
    
       Suffixe DNS propre à la connexion. . . :
       Description. . . . . . . . . . . . . . : Carte Microsoft ISATAP #3
       Adresse physique . . . . . . . . . . . : 00-00-00-00-00-00-00-E0
       DHCP activé. . . . . . . . . . . . . . : Non
       Configuration automatique activée. . . : Oui
       Passerelle par défaut. . . .*. . . . . :
       NetBIOS sur TCPIP. . . . . . . . . . . : Désactivé
    
    Carte Tunnel isatap.{AD341FE3-9001-41E7-AB4B-3B649B792032} :
    
       Statut du média. . . . . . . . . . . . : Média déconnecté
       Suffixe DNS propre à la connexion. . . :
       Description. . . . . . . . . . . . . . : Carte Microsoft ISATAP #4
       Adresse physique . . . . . . . . . . . : 00-00-00-00-00-00-00-E0
       DHCP activé. . . . . . . . . . . . . . : Non
       Configuration automatique activée. . . : Oui
    et celui de ifconfig -a
    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
    eth1      Link encap:Ethernet  HWaddr 08:00:27:e7:80:61  
              inet adr:192.168.56.101  Bcast:192.168.56.255  Masque:255.255.255.0
              adr inet6: fe80::a00:27ff:fee7:8061/64 Scope:Lien
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:112 errors:0 dropped:0 overruns:0 frame:0
              TX packets:35 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 lg file transmission:1000 
              RX bytes:18836 (18.3 KiB)  TX bytes:6668 (6.5 KiB)
    
    eth2      Link encap:Ethernet  HWaddr 08:00:27:71:f9:7a  
              inet adr:10.0.2.15  Bcast:10.0.2.255  Masque:255.255.255.0
              adr inet6: fe80::a00:27ff:fe71:f97a/64 Scope:Lien
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:9 errors:0 dropped:0 overruns:0 frame:0
              TX packets:36 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 lg file transmission:1000 
              RX bytes:1784 (1.7 KiB)  TX bytes:6590 (6.4 KiB)
    
    lo        Link encap:Boucle locale  
              inet adr:127.0.0.1  Masque:255.0.0.0
              adr inet6: ::1/128 Scope:Hôte
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:8 errors:0 dropped:0 overruns:0 frame:0
              TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 lg file transmission:0 
              RX bytes:560 (560.0 B)  TX bytes:560 (560.0 B)
    
    pan0      Link encap:Ethernet  HWaddr 0a:6b:c1:84:31:70  
              BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 lg file transmission:0 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    Voici un ping sur l'adresse de la virtual box :
    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
    ping 192.168.56.1
    
    eth1      Link encap:Ethernet  HWaddr 08:00:27:e7:80:61  
              inet adr:192.168.56.101  Bcast:192.168.56.255  Masque:255.255.255.0
              adr inet6: fe80::a00:27ff:fee7:8061/64 Scope:Lien
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:112 errors:0 dropped:0 overruns:0 frame:0
              TX packets:35 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 lg file transmission:1000 
              RX bytes:18836 (18.3 KiB)  TX bytes:6668 (6.5 KiB)
    
    eth2      Link encap:Ethernet  HWaddr 08:00:27:71:f9:7a  
              inet adr:10.0.2.15  Bcast:10.0.2.255  Masque:255.255.255.0
              adr inet6: fe80::a00:27ff:fe71:f97a/64 Scope:Lien
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:9 errors:0 dropped:0 overruns:0 frame:0
              TX packets:36 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 lg file transmission:1000 
              RX bytes:1784 (1.7 KiB)  TX bytes:6590 (6.4 KiB)
    
    lo        Link encap:Boucle locale  
              inet adr:127.0.0.1  Masque:255.0.0.0
              adr inet6: ::1/128 Scope:Hôte
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:8 errors:0 dropped:0 overruns:0 frame:0
              TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 lg file transmission:0 
              RX bytes:560 (560.0 B)  TX bytes:560 (560.0 B)
    
    pan0      Link encap:Ethernet  HWaddr 0a:6b:c1:84:31:70  
              BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 lg file transmission:0 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    ça semble fonctionner le ping non ? J'ai essayé le telnet et ça ne passe pas cependant.

    Pour l'interface réseau de la VM j'ai : le n1 en NAT et le second en host only.
    Pouvez m'indiquer lequel mettre plutot (j'en ai essayé plusieurs sans soucis)



  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    OK, je pense avoir compris

    entre ton PC et ta VM, il y a un réseau virtuel. Ce réseau est 192.168.56.0/24.

    Sur ce réseau, on trouve 2 machines :
    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
    Carte Ethernet VirtualBox Host-Only Network :
    
       Suffixe DNS propre à la connexion. . . :
       Description. . . . . . . . . . . . . . : VirtualBox Host-Only Ethernet Adapte
    r
       Adresse physique . . . . . . . . . . . : 08-00-27-00-44-BA
       DHCP activé. . . . . . . . . . . . . . : Non
       Configuration automatique activée. . . : Oui
       Adresse IPv6 de liaison locale. . . . .: fe80::f581:9051:384b:1a2c%22(préféré
    )
       Adresse IPv4. . . . . . . . . . . . . .: 192.168.56.1(préféré)
       Masque de sous-réseau. . . .*. . . . . : 255.255.255.0
       Passerelle par défaut. . . .*. . . . . :
       IAID DHCPv6 . . . . . . . . . . . : 621281319
       DUID de client DHCPv6. . . . . . . . : 00-01-00-01-17-F2-9D-EF-84-4B-F5-87-D3
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    eth1      Link encap:Ethernet  HWaddr 08:00:27:e7:80:61  
              inet adr:192.168.56.101  Bcast:192.168.56.255  Masque:255.255.255.0
              adr inet6: fe80::a00:27ff:fee7:8061/64 Scope:Lien
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:112 errors:0 dropped:0 overruns:0 frame:0
              TX packets:35 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 lg file transmission:1000 
              RX bytes:18836 (18.3 KiB)  TX bytes:6668 (6.5 KiB)
    Le premier, c'est ton PC (192.168.56.1), le second, c'est ta VM (192.168.56.101).

    Si tu as une conf par défaut, je pense que l'adresse 192.168.56.101 est une adresse attribuée par le serveur DHCP virtuel 192.168.56.1. Cela reste à confirmer.

    Ceci dit, de ton pc, tu dois pouvoir pinguer 192.168.56.101 qui est l'adresse de ta VM (à moins qu'elle ne change si adresse attribuée par DHCP) et depuis ta VM, tu dois pouvoir pinguer ton PC (au firewall et iptables près).
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    Bonjour

    Merci pour votre réponse,

    En mettant telnet 192.168.56.101 8001 j'arrive à me connecter depuis windows sur le serveur. Maintenant il me reste à analyser le code qui ne fonctionne qu'à moitié visiblement.

    De plus, il n'écrit pas "nouveau client détecté" pourquoi ? Alors qu'il passe dessus.

    Enfin mon soucis actuel est que mon appli reçoit (ou telnet envoie) envoie un message à mon serveur à chaque fois que je tape un caractère, comment taper des lignes qu'il n'envoie que lorsque je tape sur entrée ?

    (Parce que du coup mon Dispatcher est assez inefficace )

    Faut-il faire un exemple comme celui-ci : http://stackoverflow.com/questions/6...newline-occurs ?
    Boucler jusqu'à détecter le caractère de fin ?

    çe me paraitrait bien mais en C# j'envoie un char[] via send, du coup ça me perturbe un peu, il faudrait que je rajoute le caractère de fin en C# aussi ?

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par PigKey6 Voir le message
    Enfin mon soucis actuel est que mon appli reçoit (ou telnet envoie) envoie un message à mon serveur à chaque fois que je tape un caractère, comment taper des lignes qu'il n'envoie que lorsque je tape sur entrée ?
    Tu ne peux pas, c'est le fonctionnement normal du client telnet et tu ne pourras pas le modifier.

    Il va te falloir trouver un autre client TCP qui se comporte comme tu le souhaites (je n'ai pas d'idée en tête).
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Nouveau membre du Club
    Inscrit en
    Novembre 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    En effet c'est lié à telnet, mon client C# envoie des messages sans soucis, j'ai désormais un échange entre le serveur et le client fonctionnel.

    Merci beaucoup !

    Je finis mon appli (et donc corrige les derniers bugs) et revient mettre le sujet en corrigé si je n'ai pas de soucis

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par PigKey6 Voir le message
    ...et donc corrige les derniers bugs...
    Prétentieux Il reste toujours des bugs !!!
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  9. #9
    Nouveau membre du Club
    Inscrit en
    Novembre 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    Oui :p mais voilà j'ai un gros soucis qui arrive lors des tests.

    Dans mon dispatcher sur le client, il arrive que les commandes soient toutes collées dans la meme commande (le serveur envoie par exemple "abc" puis plus tard "def" et il arrive que mon client ne lise que "abcdef" ce qui fait planter mon dispatcher).

    Voici le code de mon client c#
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Client_Serveur
        {
            public static Socket sock;
            public static Thread stock;
            static String address = "192.168.56.101"; 
            static int port = 8001;
            static int TAILLEMSG = 256;
            static Client_IHM parent;
    
            static String[] casErreur = new String[] {"L'imprimante est en panne", "Absence de carton sur la ligne de prodution", 
                "Absence de palette sur la ligne de prodution", "La file d'attente est pleine", "Trop de pièces au rebut pour le carton en cours",
                "Pièce absente", "Arrêt d'urgence déclenché", "Fin lot remplissage carton", "Fin lot"};
    et voici le code de mon serveur (j'ai regardé la variable message dans envoyer message et elle est correcte à chaque fois, je doute que ça vienne du serveur le problème du coup mais je poste le code au cas où:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #define NB_CLIENT_MAX 5
    #define TAILLE_MESSAGE 256
    #define MYPORT "8001"
    #define BUFFER_SIZE 10000
    Sinon mis à part ça les bugs principaux semblent etre pas mal corrigés

    Merci d'avance !

  10. #10
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par PigKey6 Voir le message
    ...et donc corrige les derniers bugs...
    Citation Envoyé par ram-0000 Voir le message
    Prétentieux Il reste toujours des bugs !!!
    Citation Envoyé par PigKey6 Voir le message
    Oui :p mais voilà j'ai un gros soucis qui arrive lors des tests.
    Ah, tu voies !!

    Citation Envoyé par PigKey6 Voir le message
    Dans mon dispatcher sur le client, il arrive que les commandes soient toutes collées dans la meme commande (le serveur envoie par exemple "abc" puis plus tard "def" et il arrive que mon client ne lise que "abcdef" ce qui fait planter mon dispatcher).
    C'est normal, c'est le fonctionnement de TCP, il va falloir que tu t'adaptes.

    le nombre de send (d'1 coté) et de recv (de l'autre cote) sont totalement décorélés.

    Tu peux avoir 3 send pour 1 seul recv ou alors 1 send pour 3 recv ou même 3 send pour 2 recv et toute autre variation. Une connexion TCP est un stream, il n'y a pas de notion de "commande unitaire" et de séparateur de commandes dedans.

    Donc, comme il n'y a pas de notion de séparateur, c'est à toi de le créer. Pour cela, je connais 2 méthodes différentes :
    • tu utilises un caractère spécial dont tu est ABSOLUMENT sur qu'il n'est JAMAIS dans tes commandes et c'est ce caractère spécial qui sert de séparateur. C'est ce que font les protocoles "texte" (FTP, HTTP, POP, SMTP) avec le caractère CR/LF
    • tu préfixes tes commandes avec la longueur de cette commande (au format texte ou binaire, c'est à toi de décider, c'est ton protocole)

    La première méthode est plus facile à mettre en place mais elle limite les évolutions futures (en particulier, elle empêche l'envoi de binaire).
    La seconde est un peu plus pénible à mettre en place mais elle est pérenne.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  11. #11
    Nouveau membre du Club
    Inscrit en
    Novembre 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    D'accord merci je vais regarder ça.

    (je savais qu'il y aurait des bugs surtout vu ma connaissance du réseau )


    EDIT: Après reflexion et correction mon serveur arrive à fonctionner normalement (à peu près).

    J'ai alors une question d'ordre plus général.
    Cet exemple de serveur n'était qu'un apprentissage pour moi (dans le cadre d'un tp en cours) mais je réalise parallèlement une application que j'aimerais mettre en réseau.
    Le serveur ici mis en place aurait je pense du mal à s'adapter à plus de quelques clients en simultané et ne pourrait pas traiter chaque client si ?

    Dans le cadre d serveur pour les jeux vidéos où en théorie des milliers de personnes peuvent se connecter en simultané comment ceci est géré ? (je suppose qu'il y a plusieurs serveurs déjà) c'est le meme processus ? 2 threads pour chaque client ? Un qui écoute et l'autre qui envoie ?

    Merci de votre réponse.

Discussions similaires

  1. [AD] se connecter au serveur LDAP avec un client LDAP de base
    Par novices dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 24/04/2007, 18h17
  2. [Utilisation] Comparaison des versions sur le serveur et sur le client
    Par ruff15 dans le forum CVS
    Réponses: 1
    Dernier message: 18/03/2007, 15h54
  3. [EJB3] Mise à jour des Entity coté serveur si modif coté client
    Par SeeNapse dans le forum Java EE
    Réponses: 8
    Dernier message: 23/01/2007, 07h46
  4. Réponses: 3
    Dernier message: 02/07/2006, 13h17
  5. Socket:Envoyer du texte d'un serveur vers tout les clients
    Par cedm78 dans le forum Web & réseau
    Réponses: 7
    Dernier message: 01/08/2002, 16h40

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