Advertisement
Guest User

Untitled

a guest
May 22nd, 2015
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # encoding: utf-8
  3. #
  4. # Copyright (c) 2010 Doug Hellmann. All rights reserved.
  5. #
  6. """Sending Unicode data over a socket.
  7. """
  8. #end_pymotw_header
  9.  
  10. import sys
  11. import SocketServer
  12.  
  13.  
  14. class Echo(SocketServer.BaseRequestHandler):
  15.  
  16. def handle(self):
  17. # Get some bytes and echo them back to the client. There is
  18. # no need to decode them, since they are not used.
  19. data = self.request.recv(1024)
  20. self.request.send(data)
  21. return
  22.  
  23.  
  24. class PassThrough(object):
  25.  
  26. def __init__(self, other):
  27. self.other = other
  28.  
  29. def write(self, data):
  30. print 'Writing :', repr(data)
  31. return self.other.write(data)
  32.  
  33. def read(self, size=-1):
  34. print 'Reading :',
  35. data = self.other.read(size)
  36. print repr(data)
  37. return data
  38.  
  39. def flush(self):
  40. return self.other.flush()
  41.  
  42. def close(self):
  43. return self.other.close()
  44.  
  45.  
  46. if __name__ == '__main__':
  47. import codecs
  48. import socket
  49. import threading
  50.  
  51. address = ('localhost', 0) # let the kernel assign a port
  52. server = SocketServer.TCPServer(address, Echo)
  53. ip, port = server.server_address # what port was assigned?
  54.  
  55. t = threading.Thread(target=server.serve_forever)
  56. t.setDaemon(True) # don't hang on exit
  57. t.start()
  58.  
  59. # Connect to the server
  60. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  61. s.connect((ip, port))
  62.  
  63. # Wrap the socket with a reader and writer.
  64. read_file = s.makefile('r')
  65. incoming = codecs.getreader('utf-8')(PassThrough(read_file))
  66. write_file = s.makefile('w')
  67. outgoing = codecs.getwriter('utf-8')(PassThrough(write_file))
  68.  
  69. # Send the data
  70. text = u'pi: π'
  71. print 'Sending :', repr(text)
  72. outgoing.write(text)
  73. outgoing.flush()
  74.  
  75. # Receive a response
  76. response = incoming.read()
  77. print 'Received:', repr(response)
  78.  
  79. # Clean up
  80. s.close()
  81. server.socket.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement