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
Sincerely,
    Me
import SocketServer

def echo(self, data, server, client): #the default handling function
    client.send(data) #echo
    
def create_handler(handle_func=echo): #creates an handler
    class Handler(SocketServer.BaseRequestHandler): #the handler
        def handle(self): #the handle method
            handle_func(self, self.request.recv(1024), self.server, self.request) #call the handle method giving self, the data, the server, and the client
                
def run(handle_func = echo, host='localhost', port=1024): #init function
    SocketServer.TCPServer((host, port), create_handler(handle_func)).serve_forever() #serve forever

if __name__ == '__main__': run() #if run directly, run server
import socket

class Client(object): #client object
    def __init__(self, host = 'localhost', port = 1024, timeout = None):
        self.host = host #set attributes
        self.port = port
        self.__sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Make a sock
        self.connect(self.host, self.port)
        self.timeout = timeout
        
    def send(self, data): #send data
        if self.closed: raise NotConnectedError, 'The socket isn\'t connected.' #if closed, raise error
        self.__sock.send(data)
    def recv(self): #receive data
        if self.closed: raise NotConnectedError, 'The socket isn\'t connected.' #if closed, raise error
        return self.__sock.recv(1024)
    def close(self): #close sock
        self.__sock.close()
        self.closed = True
    def connect(self, host, port): #connect or reconnect
        self.__sock.connect((host, port))
        self.closed = False #set closed to false
    def __get_timeout(self): return self.__sock.gettimeout()
    def __set_timeout(self, timeout): self.__sock.settimeout(timeout)
    timeout = property(__get_timeout, __set_timeout)
    

class __NotConnectedError(Exception): pass #A ClosedError

if __name__ == '__main__':
    client = Client()
    while True:
        client.send(raw_input('What do you want to send? '))
        print client.recv()
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to