Socket

Signaler
Messages postés
158
Date d'inscription
samedi 31 janvier 2004
Statut
Membre
Dernière intervention
12 mars 2009
-
Messages postés
6
Date d'inscription
samedi 4 mai 2002
Statut
Membre
Dernière intervention
3 avril 2005
-
j'ai fait une application ou 2 client se connect à un server . j'ai 3 machine :la A server B et C sont client
les 2 clients se connectent sans problèmes au serveur.j'aimerai en faite que si B envois une donné vers le server celuici reconnaisse que c'est B et achemine cell ci vers C et si c'est C qui l'envois A renvois vers B.

1-pour cela je me demande si la fonction recv() reçoit l'ip de l'envoyeur et si c'est le cas comment lire après koi comment alors donner l'IP de destination lors de l'envois vers une autre machine.

2-la fonction recv() à tandance à bloquer tout ce qui fait que je ne peux rien faire quand mon server attend un paquet.

2 réponses

Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
10
1) il me semble que toutes les infos sur la connection se trouve dans la structure SOCKADDR_IN. c'est confirmer, voila la structure d'un SOCKADDR_IN trouvé sur la MSDN:

In the Internet address family, the SOCKADDR_IN structure is used by Windows Sockets to specify a local or remote endpoint address to which to connect a socket.

struct sockaddr_in{
short sin_family;
unsigned short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};


Parameters

* sin_family : Address family (must be AF_INET).
* sin_port : IP port.
* sin_addr : IP address.
* sin_zero : <DD>Padding to make structure the same size as SOCKADDR.

Remarks

This is the form of the SOCKADDR structure specific to the Internet address family and can be cast to SOCKADDR.


The IP address component of this structure is of type IN_ADDR. The IN_ADDR structure is defined in Windows Sockets header file WINSOCK.H as follows:

struct in_addr {
union {
struct{
unsigned char s_b1,
s_b2,
s_b3,
s_b4;
} S_un_b;
struct {
unsigned short s_w1,
s_w2;
} S_un_w;
unsigned long S_addr;
} S_un;
};


For more information, see Windows Sockets Programming Considerations in the Platform SDK.

2) pour éviter de le rentre bloquant il te faut utiliser les threads (il y a de multiple exemple sur le site)
Bob...

"La chance accorde ses faveur aux esprits avertis..."
Messages postés
6
Date d'inscription
samedi 4 mai 2002
Statut
Membre
Dernière intervention
3 avril 2005

pb 1

sur ton serveur

//variables

char mess[255];

SOCKADDR_IN Soc_Info_C;

int InfoSize = sizeof(Soc_Info_C);



//programme

if ((Soc_Cli=accept(Soc_Serveur,(SOCKADDR*)&Soc_Info_C,&InfoSize))!=INVALID_SOCKET )

{

strcpy(mess,inet_ntoa(Soc_Info_C.sin_addr));

printf("Connexion a partir de %s \n",mess);

}


pb 2

tupeux essayer d'utiliser un TIMER
_ _