[Tutor] Networking

Evert Rol evert.rol at gmail.com
Thu Oct 14 18:49:20 CEST 2010


 Hi Chris,

Bit hard to comment on the actual code, as it was in attachments, but the important bit is here:

    class Handler(SocketServer.BaseRequestHandler): #the handler
        '''A handler which calls %s in the handle method.'''%handle_func
        def handle(self): #the handle method
            self.data = self.request.recv(1024) #the data
            self.client = self.request #the client
            handle_func(self) #call the handle method giving self
            

(I did a bit of reformatting, since I had to try the code myself, because I didn't spot the error immediately.)

In essence, your server accepts the client connection, then proceeds to the handle function, where it performs the necessary actions. It will *not* call the handle function for each set of data it receives, it just stays there. 
So you'll need a while loop in your handle function that keeps on processing the client data, until there is not client data anymore (EOF or similar), then return.


  Evert



>>>> Dear Tutors, 
>>>>      I have attached my 2 programs for networking. It uses socket and SocketServer, but it just simplifies it even more. The problem is it won't work. The Client raises the error, (with trace back) 
>>>> Traceback (most recent call last): 
>>>>    File "G:\My Dropbox\My Dropbox\Chris\Not done\client.py", line 34, in<module> 
>>>>      print client.recv() 
>>>>    File "G:\My Dropbox\My Dropbox\Chris\Not done\client.py", line 16, in recv 
>>>>      return self.__sock.recv(1024) 
>>>> error: [Errno 10053] An established connection was aborted by the software in your host machine 
>>>> The server seems to get an error of some sort, but also seems to catch and print it. It prints 
>>>> ---------------------------------------- 
>>>> Exception happened during processing of request from ('127.0.0.1', 1424) 
>>>> Traceback (most recent call last): 
>>>>    File "C:\Python26\lib\SocketServer.py", line 281, in _handle_request_noblock 
>>>>      self.process_request(request, client_address) 
>>>>    File "C:\Python26\lib\SocketServer.py", line 307, in process_request 
>>>>      self.finish_request(request, client_address) 
>>>>    File "C:\Python26\lib\SocketServer.py", line 320, in finish_request 
>>>>      self.RequestHandlerClass(request, client_address, self) 
>>>> TypeError: 'NoneType' object is not callable 
>>>> ---------------------------------------- 
>>>> I look at both of the documentations of socket and SocketServer, but I couldn't firgue it out. I don't know much about networking. Please Help 
>>> I don't know much about networking, less so about it on Windows; also, I've only scanned quickly through the server script, but I notice your create_handler() function doesn't return anything. I guess it needs to return the Handler class. 
>>> The example in the Python docs doesn't use a factory function, but instead directly puts the class as the second argument to TCPServer. 
>>> So the second argument needs to be a class, but since your create_handler() function returns nothing, you presumably get this NoneType exception. 
>>> 
>>>    Evert 
>>> 
>> Yeah, that could be a problem. It should return the class. 
> Now it won't send more than once. The Error the clients raises is:
> Traceback (most recent call last):
>   File "G:\My Dropbox\My Dropbox\Chris\Not done\client.py", line 34, in <module>
>     print client.recv()
>   File "G:\My Dropbox\My Dropbox\Chris\Not done\client.py", line 16, in recv
>     return self.__sock.recv(1024)
> error: [Errno 10053] An established connection was aborted by the software in your host machine
> The server is blissfully unaware of its crashing clients, and keeps on going to help more clients to there dooms. The client can receive data multiple times, but just can send twice. Please help.
> <server.py><client.py>_______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor



More information about the Tutor mailing list