Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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 assign a port
- server = SocketServer.TCPServer(address, Echo)
- ip, port = server.server_address # what port was assigned?
- 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.
- read_file = s.makefile('r')
- incoming = codecs.getreader('utf-8')(PassThrough(read_file))
- write_file = s.makefile('w')
- outgoing = codecs.getwriter('utf-8')(PassThrough(write_file))
- # 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()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement