[code.view]

[top] / python / PyMOTW / codecs / codecs_socket.py

     #!/usr/bin/env python
     # encoding: utf-8
     #
     # Copyright (c) 2010 Doug Hellmann.  All rights reserved.
     #
     """Sending Unicode data over a socket.
     """
     #end_pymotw_header
     
     import sys
     import SocketServer
     
     
     class Echo(SocketServer.BaseRequestHandler):
     
         def handle(self):
             # Get some bytes and echo them back to the client.  There is
             # no need to decode them, since they are not used.
             data = self.request.recv(1024)
             self.request.send(data)
             return
     
     
     class PassThrough(object):
     
         def __init__(self, other):
             self.other = other
     
         def write(self, data):
             print 'Writing :', repr(data)
             return self.other.write(data)
     
         def read(self, size=-1):
             print 'Reading :',
             data = self.other.read(size)
             print repr(data)
             return data
     
         def flush(self):
             return self.other.flush()
     
         def close(self):
             return self.other.close()
         
     
     if __name__ == '__main__':
         import codecs
         import socket
         import threading
     
         address = ('localhost', 0) # let the kernel give us a port
         server = SocketServer.TCPServer(address, Echo)
         ip, port = server.server_address # find out what port we were given
     
         t = threading.Thread(target=server.serve_forever)
         t.setDaemon(True) # don't hang on exit
         t.start()
     
         # Connect to the server
         s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         s.connect((ip, port))
     
         # Wrap the socket with a reader and writer.
         incoming = codecs.getreader('utf-8')(PassThrough(s.makefile('r')))
         outgoing = codecs.getwriter('utf-8')(PassThrough(s.makefile('w')))
     
         # Send the data
         text = u'pi: π'
         print 'Sending :', repr(text)
         outgoing.write(text)
         outgoing.flush()
     
         # Receive a response
         response = incoming.read()
         print 'Received:', repr(response)
     
         # Clean up
         s.close()
         server.socket.close()
     

[top] / python / PyMOTW / codecs / codecs_socket.py

contact | logmethods.com