On 11/5/2010 8:10 PM, Alan Gauld wrote:

"Chris King" <g.nius...@gmail.com> wrote

If you are using Windows, turn off the built-in firewall. That's what fixed my problems.
~Corey

also, it is on the same network, so the server shouldn't be a problem

I think Corey means the firewall on your PC if you have one. It could
be blocking outgoing traffic to uncommon port numbers or somesuch.

Its worth trying if only to eliminate the possibility

Alan G.

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor
The firewall pops up and I click allow. It has nothing to do with the firewall at all. Did you find any other errors at all?
import SocketServer, cPickle, socket
def IP(): return socket.gethostbyname(socket.gethostname()) #return IP address
def echo(self): #the default handling function
    if self.data == 'shut down': # if user wants to kill self
        self.shut_down() #shut
    print 'Recieved %s from %s. Echoing back.' % (self.data, self.client_address)
    self.send(self.data) #echo

class BreakOutError(Exception): pass #an error for breaking out

def create_handler(handle_func=echo): #creates an handler
    
    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
            handle_func(self) #call the handle method giving self
            
        def send(self, data): self.request.send(data) #send data    
        def shut_down(self): #if you want to stop server
            '''End server loop'''
            self.server.shut_self_down = True #set shut down to true
            raise BreakOutError #raise error
        
    return Handler
def pickle_echo(self):
    print 'Recived %s, a %s, from %s. Echoing back.' % (self.data, type(self.data), self.client_address)
    self.send(self.data)

def pickle_HC(handle_func = pickle_echo): #a function that returns a handler that can send a recvieve more than strings if to a pickle client
    base = create_handler(handle_func) #make a base
    class pickle_Handler(base):
        '''A handler which call %s in the handle method and pickle/unpickles on the way in and out.'''%handle_func
        def handle(self):
            self.data = cPickle.loads(self.request.recv(1024)) #unpickle data
            handle_func(self)
        def send(self, data): base.send(self, cPickle.dumps(data))
    return pickle_Handler
class EB_Server(SocketServer.TCPServer):
    '''Error Breakout Server
When you use server.shutdown, it waits for the handle to end, but this is the only place to do stuff.
So the error breakout server uses error to break out of a server loop, which will be caught outside.'''
    
    def __init__(self, address, handler):
        '''Init, set self.shutdown to False'''
        SocketServer.TCPServer.__init__(self, address, handler) #make a handler from a function
        self.shut_self_down = False #When an error is raised and handle_error catches it, it will check if its an breakout error
        
    def handle_error(self, request, address):
        '''Test to see if shutting down.'''
        if self.shut_self_down: raise BreakOutError #if shutdown, raise breakout error
        else: SocketServer.TCPServer.handle_error(self, request, address) #If not, do normal error handling
        
def run(handle_func = echo, host = 'localhost', port=1024): #init function
    try: EB_Server((host, port), create_handler(handle_func)).serve_forever() #serve forever
    except BreakOutError: pass #If it tries to break out, catch it before it destroys us at the main level

def pickle_run(handle_func = pickle_echo, host='localhost', port = 1024):
    try: EB_Server((host, port), pickle_HC(handle_func)).serve_forever()
    except BreakOutError: pass
    
if __name__ == '__main__':
    print 'The IP is %s.' % IP()
    run(port = int(raw_input('What port? '))) #if run directly, run server
import socket, cPickle

class NotConnectedError(Exception): pass #A ClosedError

class Client(object): #client object
    
    def __init__(self, host = 'localhost', port = 1024, timeout = None):
        print host
        self.host = host #set attributes
        self.port = port
        self.timeout = timeout
        self.closed = False

    def send(self, data): #send data
        try: self.__sock.close() #close old socket
        except AttributeError: pass #If there isn't a socket, don't worry about it
        self.__sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #make a new one
        self.__sock.connect((self.host, self.port))
        self.closed = False
        self.__sock.settimeout(self.timeout)
        self.__sock.sendall(data)

    def old_send(self, data): #send with same socket
        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 = True #set closed to false
        
    def __get_timeout(self):
        try: return self.__sock.gettimeout()
        except AttributeError: return self.__timeout #sock may not exist, so do predefined

    def __set_timeout(self, timeout):
        self.__timeout = timeout
        try: self.__sock.settimeout(self.__timeout)
        except AttributeError: pass #sock may not exist
        
    timeout = property(__get_timeout, __set_timeout)
    
class Pickle_Client(Client): #a client to send objects, not just strings
    def send(self, data):
        Client.send(self, cPickle.dumps(data)) #pickle the object first
    def recv(self):
        return cPickle.loads(Client.recv(self)) #unpickles object first
    
if __name__ == '__main__':
    client = Client(raw_input('What host? '), int(raw_input('What port? ')))
    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