Précédent   Forum du club des développeurs et IT Pro > Systèmes > Réseaux > Développement
Développement Vos questions relatives au développement réseau
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 10/12/2012, 13h27   #1
PigKey6
Invité régulier
 
Inscription : novembre 2011
Messages : 66
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 66
Points : 6
Points : 6
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 :
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 :
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,
PigKey6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 15h49   #2
ram-0000
Rédacteur/Modérateur

 
Avatar de ram-0000
 
Homme Raymond
Inscription : mai 2007
Messages : 9 026
Détails du profil
Informations personnelles :
Nom : Homme Raymond
Localisation : France

Informations forums :
Inscription : mai 2007
Messages : 9 026
Points : 27 730
Points : 27 730
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
.
ram-0000 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 21h06   #3
PigKey6
Invité régulier
 
Inscription : novembre 2011
Messages : 66
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 66
Points : 6
Points : 6
Bonjour,

Merci pour votre réponse.

Voici le résultat de ipconfig /all
Code :
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 :
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 :
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)


PigKey6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2012, 08h49   #4
ram-0000
Rédacteur/Modérateur

 
Avatar de ram-0000
 
Homme Raymond
Inscription : mai 2007
Messages : 9 026
Détails du profil
Informations personnelles :
Nom : Homme Raymond
Localisation : France

Informations forums :
Inscription : mai 2007
Messages : 9 026
Points : 27 730
Points : 27 730
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 :
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 :
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
.
ram-0000 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2012, 13h42   #5
PigKey6
Invité régulier
 
Inscription : novembre 2011
Messages : 66
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 66
Points : 6
Points : 6
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 ?
PigKey6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2012, 14h11   #6
ram-0000
Rédacteur/Modérateur

 
Avatar de ram-0000
 
Homme Raymond
Inscription : mai 2007
Messages : 9 026
Détails du profil
Informations personnelles :
Nom : Homme Raymond
Localisation : France

Informations forums :
Inscription : mai 2007
Messages : 9 026
Points : 27 730
Points : 27 730
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
.
ram-0000 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2012, 21h00   #7
PigKey6
Invité régulier
 
Inscription : novembre 2011
Messages : 66
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 66
Points : 6
Points : 6
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
PigKey6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2012, 21h07   #8
ram-0000
Rédacteur/Modérateur

 
Avatar de ram-0000
 
Homme Raymond
Inscription : mai 2007
Messages : 9 026
Détails du profil
Informations personnelles :
Nom : Homme Raymond
Localisation : France

Informations forums :
Inscription : mai 2007
Messages : 9 026
Points : 27 730
Points : 27 730
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
.
ram-0000 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 15h28   #9
PigKey6
Invité régulier
 
Inscription : novembre 2011
Messages : 66
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 66
Points : 6
Points : 6
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 :
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 :
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 !
PigKey6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 15h47   #10
ram-0000
Rédacteur/Modérateur

 
Avatar de ram-0000
 
Homme Raymond
Inscription : mai 2007
Messages : 9 026
Détails du profil
Informations personnelles :
Nom : Homme Raymond
Localisation : France

Informations forums :
Inscription : mai 2007
Messages : 9 026
Points : 27 730
Points : 27 730
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
.
ram-0000 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 19h55   #11
PigKey6
Invité régulier
 
Inscription : novembre 2011
Messages : 66
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 66
Points : 6
Points : 6
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.
PigKey6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h34.


 
 
 
 
Partenaires

Hébergement Web