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 - [email protected]
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
_______________________________________________
Tutor maillist - [email protected]
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor