Bonjour à tous,
je me suis codé un mini-client en C (pour envoyer des infos de debug sans (trop) consommer de CPU) et un mini-serveur en python pour recevoir ces fameuses infos.
Le hic, c'est qu'après 2 ou 3 envois réussis, le send du coté client me revoie une erreur alors que le serveur semble en bonne santé.
Pour essayer d'y voir plus clair, j'ai codé l'équivalant du serveur python en C, et là ça marche au poil.
Du coup, je me (vous) demande quelle différence il peut bien y avoir entre mon serveur python et mon serveur C ?
Voici le code du serveur python :Vous voyez que mon serveur est des plus simples, et très largement inspirés des exemples que l'on peut trouver sur la doc officielle.
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 import os import sys import time import SocketServer def DumpingServer ( port,timeout ): class TCPHandler ( SocketServer.BaseRequestHandler ): def handle(self): print self.request.recv( 2000 ) def timed_out () : server.is_alive = False server = SocketServer.TCPServer(('localhost',port),TCPHandler ) # test en local pour le moment server.timeout = timeout # <timeout> sec sans requête => terminaison server.is_alive = True # un nouvel attribut à <server> server.handle_timeout = timed_out while server.is_alive : server.handle_request() DumpingServer( 55555,60*5 ) # timeout de 5min
Il écoute le port 55555 (en dur) et print tout ce qu'il reçoit.
Mon client en C (sous Visual Studio 2005) est un peu trop long pour que je le copie-colle ici, mais en gros, il s'articule autour de :Après 2 ou 3 envois + réceptions réussis, le send échoue et l'erreur est "10053 : Software caused connection abort."
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 SOCKET socketid ; socketid = socket( AF_INET,SOCK_STREAM,IPPROTO_IP ) ; struct sockaddr_in client ; client.sin_family = AF_INET ; client.sin_addr.s_addr = inet_addr( "127.0.0.1" ) ; // test en local pour le moment client.sin_port = htons( 55555 ) ; connect( socketid,(struct sockaddr*)&client,sizeof( client )) ; for (;;) { send( m->socketid,buffer,size,0 ) ; // buffer contient des infos de debug... }
Mon serveur en C (avec qui les envois+réceptions sont ok) ressemble au client :Si quelqu'un comprend ce qui cloche dans mon serveur python, son avis serait le bienvenu.
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 SOCKET connfd = socket( AF_INET,SOCK_STREAM,IPPROTO_IP ) ; struct sockaddr_in servaddr ; servaddr.sin_family = AF_INET ; servaddr.sin_addr.s_addr = htonl( INADDR_ANY ) ; servaddr.sin_port = htons( 55555 ) ; bind( connfd,(struct sockaddr*)&servaddr,sizeof( servaddr )) ; listen( connfd,1 ) ; SOCKET socketid = accept( connfd,NULL,NULL ) ; for (;;) { char buffer [1000] ; int received = recv( m->socketid,buffer,1000,0 ) ; fwrite( buffer,received,1,output ) ; }
Merci de m'avoir lu et de vos réponses !
Partager