From 06fd5f8cc854c79b5a4b113d7ef9ab01227d94cf Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sat, 8 Nov 2008 17:24:34 +0000 Subject: fix the socketserver demo code for py3k #4275 Thanks to Don MacMillen --- Demo/sockets/udpecho.py | 3 ++- Demo/sockets/unixclient.py | 2 +- Doc/library/socketserver.rst | 57 ++++++++++++++++++++++---------------------- Misc/ACKS | 1 + Misc/NEWS | 5 ++++ 5 files changed, 38 insertions(+), 30 deletions(-) diff --git a/Demo/sockets/udpecho.py b/Demo/sockets/udpecho.py index 8a6bd21..9966fd8 100755 --- a/Demo/sockets/udpecho.py +++ b/Demo/sockets/udpecho.py @@ -56,7 +56,8 @@ def client(): line = sys.stdin.readline() if not line: break - s.sendto(line, addr) + print('addr = ', addr) + s.sendto(bytes(line, 'ascii'), addr) data, fromaddr = s.recvfrom(BUFSIZE) print('client received %r from %r' % (data, fromaddr)) diff --git a/Demo/sockets/unixclient.py b/Demo/sockets/unixclient.py index cdccb84..5e87eed 100644 --- a/Demo/sockets/unixclient.py +++ b/Demo/sockets/unixclient.py @@ -6,7 +6,7 @@ from socket import * FILE = 'unix-socket' s = socket(AF_UNIX, SOCK_STREAM) s.connect(FILE) -s.send('Hello, world') +s.send(b'Hello, world') data = s.recv(1024) s.close() print('Received', repr(data)) diff --git a/Doc/library/socketserver.rst b/Doc/library/socketserver.rst index 221de2e..d827b9e 100644 --- a/Doc/library/socketserver.rst +++ b/Doc/library/socketserver.rst @@ -336,8 +336,8 @@ This is the server side:: def handle(self): # self.request is the TCP socket connected to the client self.data = self.request.recv(1024).strip() - print "%s wrote:" % self.client_address[0] - print self.data + print("%s wrote:" % self.client_address[0]) + print(self.data) # just send back the same data, but upper-cased self.request.send(self.data.upper()) @@ -360,8 +360,8 @@ objects that simplify communication by providing the standard file interface):: # self.rfile is a file-like object created by the handler; # we can now use e.g. readline() instead of raw recv() calls self.data = self.rfile.readline().strip() - print "%s wrote:" % self.client_address[0] - print self.data + print("%s wrote:" % self.client_address[0]) + print(self.data) # Likewise, self.wfile is a file-like object used to write back # to the client self.wfile.write(self.data.upper()) @@ -385,14 +385,14 @@ This is the client side:: # Connect to server and send data sock.connect((HOST, PORT)) - sock.send(data + "\n") + sock.send(bytes(data + "\n","utf8")) # Receive data from the server and shut down received = sock.recv(1024) sock.close() - print "Sent: %s" % data - print "Received: %s" % received + print("Sent: %s" % data) + print("Received: %s" % received) The output of the example should look something like this: @@ -401,18 +401,18 @@ Server:: $ python TCPServer.py 127.0.0.1 wrote: - hello world with TCP + b'hello world with TCP' 127.0.0.1 wrote: - python is nice + b'python is nice' Client:: $ python TCPClient.py hello world with TCP Sent: hello world with TCP - Received: HELLO WORLD WITH TCP + Received: b'HELLO WORLD WITH TCP' $ python TCPClient.py python is nice Sent: python is nice - Received: PYTHON IS NICE + Received: b'PYTHON IS NICE' :class:`socketserver.UDPServer` Example @@ -433,13 +433,13 @@ This is the server side:: def handle(self): data = self.request[0].strip() socket = self.request[1] - print "%s wrote:" % self.client_address[0] - print data + print("%s wrote:" % self.client_address[0]) + print(data) socket.sendto(data.upper(), self.client_address) if __name__ == "__main__": HOST, PORT = "localhost", 9999 - server = socketserver.UDPServer((HOST, PORT), BaseUDPRequestHandler) + server = socketserver.UDPServer((HOST, PORT), MyUDPHandler) server.serve_forever() This is the client side:: @@ -447,7 +447,7 @@ This is the client side:: import socket import sys - HOST, PORT = "localhost" + HOST, PORT = "localhost", 9999 data = " ".join(sys.argv[1:]) # SOCK_DGRAM is the socket type to use for UDP sockets @@ -455,11 +455,11 @@ This is the client side:: # As you can see, there is no connect() call; UDP has no connections. # Instead, data is directly sent to the recipient via sendto(). - sock.sendto(data + "\n", (HOST, PORT)) + sock.sendto(bytes(data + "\n","utf8"), (HOST, PORT)) received = sock.recv(1024) - print "Sent: %s" % data - print "Received: %s" % received + print("Sent: %s" % data) + print("Received: %s" % received) The output of the example should look exactly like for the TCP server example. @@ -481,7 +481,7 @@ An example for the :class:`ThreadingMixIn` class:: def handle(self): data = self.request.recv(1024) cur_thread = threading.current_thread() - response = "%s: %s" % (cur_thread.get_name(), data) + response = bytes("%s: %s" % (cur_thread.getName(), data),'ascii') self.request.send(response) class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer): @@ -492,7 +492,7 @@ An example for the :class:`ThreadingMixIn` class:: sock.connect((ip, port)) sock.send(message) response = sock.recv(1024) - print "Received: %s" % response + print("Received: %s" % response) sock.close() if __name__ == "__main__": @@ -506,23 +506,24 @@ An example for the :class:`ThreadingMixIn` class:: # more thread for each request server_thread = threading.Thread(target=server.serve_forever) # Exit the server thread when the main thread terminates - server_thread.set_daemon(True) + server_thread.setDaemon(True) server_thread.start() - print "Server loop running in thread:", t.get_name() + print("Server loop running in thread:", server_thread.getName()) - client(ip, port, "Hello World 1") - client(ip, port, "Hello World 2") - client(ip, port, "Hello World 3") + client(ip, port, b"Hello World 1") + client(ip, port, b"Hello World 2") + client(ip, port, b"Hello World 3") server.shutdown() + The output of the example should look something like this:: $ python ThreadedTCPServer.py Server loop running in thread: Thread-1 - Received: Thread-2: Hello World 1 - Received: Thread-3: Hello World 2 - Received: Thread-4: Hello World 3 + Received: b"Thread-2: b'Hello World 1'" + Received: b"Thread-3: b'Hello World 2'" + Received: b"Thread-4: b'Hello World 3'" The :class:`ForkingMixIn` class is used in the same way, except that the server diff --git a/Misc/ACKS b/Misc/ACKS index a33b6e9..19a4f8a 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -435,6 +435,7 @@ Martin von L Andrew I MacIntyre Tim MacKenzie Nick Maclaren +Don MacMillen Steve Majewski Grzegorz Makarewicz Ken Manheimer diff --git a/Misc/NEWS b/Misc/NEWS index 52f2bae..36095e0 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -23,6 +23,11 @@ Build - Issue #1656675: Register a drop handler for .py* files on Windows. +Tools/Demos +----------- + +- Demos of the socketserver module now work with Python 3. + What's New in Python 3.0 release candidate 2 ============================================ -- cgit v0.12