Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Double socket [ Windows / Réseau & Internet ] (sivaller)

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é 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 Creer un socket bluetooth [ par siteupset ] Bonjour à tous,  depuis un petit moment j'essaie de faire un programme qui puisse communiquer avec mon téléphone portable. Je me confronte cependant à utiliser les API pipe [ par miki42 ] Bonjour a tous,voila depuis longtemp déja je souhaite réaliser un programme qui connecterait le shell de windows a savoir "cmd.exe" sur une socket.Pou probleme avec une boucle do while [ par miki42 ] Bonjour a tous,voila je realise un logiciel de brute force ftp ceci etant pour améliorer mon niveau en programation,bref j'ai un probleme sur ma boucl


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,218 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.