begin process at 2012 02 12 13:41:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Réseau & Internet

 > 

Double socket


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Double socket

vendredi 1 août 2008 à 11:53:43 | Double socket

sivaller

Bonjour,

Il y a quelque chose que je ne comprend pas,
j'ai conçu un projet Client/Server , et
le programme client utilise 2 sockets TCP (un pour les requete distante) , l'autre pour les messages (message administratives,message arret serveur,message deconnexion). Le programme client se connecte 2 fois et meme port pour avoir 2 sockets.

Ce que je ne comprend pas Winsock retourne au niveau du serveur une erreur comme quoi le socket distance à été déconnecté et que ce n'est pas le cas.

Pourtant les 2 sockets sont en mode keep-alive au client et serveur.
Dans le programme client j'utilise ioctlsocket et recv pour recevoir les données et au serveur j'utilise wsaasyncselect.

Programme client :

Code :
int connectserver(char* host)
{
 sockaddr_in skaddr;
 tv.tv_sec = 30000;  /* 30 Secs Timeout */
 int hsocket;
 hsocket=socket(Internet,Stream,0);
 if (hsocket!=-1)
 {
  ZeroMemory(&skaddr,sizeof(skaddr));
  skaddr.sin_family=Internet;
  skaddr.sin_port=swap(1002);
  unsigned long l=HostToLong(host);
  skaddr.sin_addr.S_un.S_addr=l;
  if (connect(hsocket,(sockaddr*)&skaddr,sizeof skaddr)!=0)
  {
   closesocket(hsocket);
   
   return 0;
  }
  
  setsockopt(hsocket, SOL_SOCKET, SO_RCVTIMEO,(const char*)&tv,sizeof(struct timeval));
  setsockopt(hsocket, SOL_SOCKET, SO_SNDTIMEO,(const char*)&tv,sizeof(struct timeval));

  BOOL bOptVal = TRUE;
  int bOptLen = sizeof(BOOL);
  int iOptVal;
  int iOptLen = sizeof(int);
  setsockopt(hsocket, SOL_SOCKET, SO_KEEPALIVE, (char*)&bOptVal, bOptLen);


  return hsocket;
 }
 return 0;
}

Programme serveur en Pascal

Code :
case msg.lParam of
     FD_ACCEPT: begin
           // log('Demande de connexion');
            //if (nombreconnection+1<=nombreconnectionmax) then begin
//                 inc(nombreconnection);
                scknew :=  accept(msg.wparam,0,0);
                setcode(scknew,$4555);
                i := getcode(scknew);;
               // sendbuf(msg.wparam,@i,2);
                WSAASyncSelect(scknew,principale.Handle,WM_USER,FD_CLOSE or FD_CONNECT or FD_ACCEPT or FD_READ);
                tv.tv_sec := 5000;
                tv.tv_usec := 500;
                setsockopt(scknew, SOL_SOCKET, SO_RCVTIMEO,@tv,sizeof(tv));
              setsockopt(scknew, SOL_SOCKET, SO_SNDTIMEO,@tv,sizeof(tv));
                bk := true;
                setsockopt(scknew, SOL_SOCKET, SO_KEEPALIVE, @bk, 1);
            //end else
            //  closesocket(msg.WParam);


                end;
     FD_CONNECT:begin
               // nombreconnection := nombreconnection;

                end;

Je ne comprend pas pourquoi ca deconnecte au niveau du client pourtant je ne ferme pas le socket.

Merci de votre aide.

Sivaller - Cewod Bewod emulateur 80186 + X.M Lanceur de systéme DOS

mardi 5 août 2008 à 01:22:49 | Re : Double socket

victorcoasne

Membre Club
Bonjour,

Pour deux connection en simultanées il est préférable d'utiliser 2 thread.
Après tout dépend de tes attentes.

Mais il faut surtout que ces deux connections soient créer sur deux variables différentes.

Merci et bonne prog,
@++

Le créateur du site http://victorlogiciels.com


Cette discussion est classée dans : socket, sizeof, tv, hsocket, skaddr


Répondre à ce message

Sujets en rapport avec ce message

Probleme de socket (envoi) [ par SnOOpss ] Salut !!!Voila g realisé nn programme pour m'envoyer des socket a moi meme ( c pr tester) *********Client******** #include #pragma comment(lib, "ws2_3 Socket en C [ par RM50Man ] WSADATA ws;                    WSAStartup(MAKEWORD(2,0), &ws);              &n socket [ par gaussdelphine ] J'essaye de programmer une socket em mode datagramme SOCK_RAW. J'ai le message d'erreur suivant à la compilation:sizeof applied to an incomplete type Socket [ par casper_2 ] Rebonjour,jaimerais savoit,koment pourrai-je me reconecter automatiquement au serveur.ex:je lance mon programme sans ouvrir ma connexion internet.10 s probleme avec les socket et le SMTP [ par simsim_14 ] Bonjourdonc voila j'ai un probleme . Je me suis mis a programmer depuis pas longtemps donc il y as encore certains points que je connais pas parfaitem probleme de send en C avec socket [ par thorn74 ] bonjour je suis actuellement en IUT info et G un  projet a faire mais je bloque je doit fair eun petit programme ou lorsqu'un ordinateur se connecte a probleme boucles mutliple avec les sockets [ par miki42 ] Bonjour a tous voila j'ai pa le choix,deja une semaine que je mord la langue pour trouver dou vient mon probleme mais rien y fait suit obliger de fari Socket avec Time out sous windows [ par ghanmi04_05 ] Bonjour, J'ai un programme qui intercept les paquets sur une ip(de l'une de mes cartes réseaux) sous windows. [code=cpp] SOCKET sock; if((sock = s Lecture grace au socket -- Erreur [ par megamario ] Bonjour j'ai un petit problème avec une appli que l'on doit fait au lycée, un mini chat. Le voudrais que lorsque l'on appuis sur un bouton connexion Socket error 10054 : Grr Vista [ par xabila ] Bonjour, Vista me bloque mon reseau. Est ce qu'il y a qqchose à decocher qq part dans VISTA pour ne pas etre embetté? Merci !


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,883 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales