Issue 13141: Demonstrate recommended style for socketserver examples.
authorFlorent Xicluna <florent.xicluna@gmail.com>
Sun, 23 Oct 2011 20:40:37 +0000 (22:40 +0200)
committerFlorent Xicluna <florent.xicluna@gmail.com>
Sun, 23 Oct 2011 20:40:37 +0000 (22:40 +0200)
Doc/library/socketserver.rst
Misc/NEWS

index 1d151a7fe6605406e8f4dc49137fb7c7204fe977..177c0b11c475f75faefeee8dfd0207a258e3cffa 100644 (file)
@@ -348,7 +348,7 @@ 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("{} wrote:".format(self.client_address[0]))
            print(self.data)
            # just send back the same data, but upper-cased
            self.request.send(self.data.upper())
@@ -372,7 +372,7 @@ 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("{} wrote:".format(self.client_address[0]))
            print(self.data)
            # Likewise, self.wfile is a file-like object used to write back
            # to the client
@@ -395,16 +395,18 @@ This is the client side::
    # Create a socket (SOCK_STREAM means a TCP socket)
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
-   # Connect to server and send data
-   sock.connect((HOST, PORT))
-   sock.send(bytes(data + "\n","utf8"))
+   try:
+       # Connect to server and send data
+       sock.connect((HOST, PORT))
+       sock.send(bytes(data + "\n", "utf-8"))
 
-   # Receive data from the server and shut down
-   received = sock.recv(1024)
-   sock.close()
+       # Receive data from the server and shut down
+       received = str(sock.recv(1024), "utf-8")
+   finally:
+       sock.close()
 
-   print("Sent:     %s" % data)
-   print("Received: %s" % received)
+   print("Sent:     {}".format(data))
+   print("Received: {}".format(received))
 
 
 The output of the example should look something like this:
@@ -421,10 +423,10 @@ Client::
 
    $ python TCPClient.py hello world with TCP
    Sent:     hello world with TCP
-   Received: b'HELLO WORLD WITH TCP'
+   Received: HELLO WORLD WITH TCP
    $ python TCPClient.py python is nice
    Sent:     python is nice
-   Received: b'PYTHON IS NICE'
+   Received: PYTHON IS NICE
 
 
 :class:`socketserver.UDPServer` Example
@@ -445,7 +447,7 @@ 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("{} wrote:".format(self.client_address[0]))
            print(data)
            socket.sendto(data.upper(), self.client_address)
 
@@ -467,11 +469,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(bytes(data + "\n","utf8"), (HOST, PORT))
-   received = sock.recv(1024)
+   sock.sendto(bytes(data + "\n", "utf-8"), (HOST, PORT))
+   received = str(sock.recv(1024), "utf-8")
 
-   print("Sent:     %s" % data)
-   print("Received: %s" % received)
+   print("Sent:     {}".format(data))
+   print("Received: {}".format(received))
 
 The output of the example should look exactly like for the TCP server example.
 
@@ -491,9 +493,9 @@ An example for the :class:`ThreadingMixIn` class::
    class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
 
        def handle(self):
-           data = self.request.recv(1024)
+           data = str(self.request.recv(1024), 'ascii')
            cur_thread = threading.current_thread()
-           response = bytes("%s: %s" % (cur_thread.getName(), data),'ascii')
+           response = bytes("{}: {}".format(cur_thread.name, data), 'ascii')
            self.request.send(response)
 
    class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
@@ -502,10 +504,12 @@ An example for the :class:`ThreadingMixIn` class::
    def client(ip, port, message):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.connect((ip, port))
-       sock.send(message)
-       response = sock.recv(1024)
-       print("Received: %s" % response)
-       sock.close()
+       try:
+           sock.send(bytes(message, 'ascii'))
+           response = str(sock.recv(1024), 'ascii')
+           print("Received: {}".format(response))
+       finally:
+           sock.close()
 
    if __name__ == "__main__":
        # Port 0 means to select an arbitrary unused port
@@ -518,13 +522,13 @@ 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.setDaemon(True)
+       server_thread.daemon = True
        server_thread.start()
        print("Server loop running in thread:", server_thread.name)
 
-       client(ip, port, b"Hello World 1")
-       client(ip, port, b"Hello World 2")
-       client(ip, port, b"Hello World 3")
+       client(ip, port, "Hello World 1")
+       client(ip, port, "Hello World 2")
+       client(ip, port, "Hello World 3")
 
        server.shutdown()
 
@@ -533,9 +537,9 @@ The output of the example should look something like this::
 
    $ python ThreadedTCPServer.py
    Server loop running in thread: Thread-1
-   Received: b"Thread-2: b'Hello World 1'"
-   Received: b"Thread-3: b'Hello World 2'"
-   Received: b"Thread-4: b'Hello World 3'"
+   Received: Thread-2: Hello World 1
+   Received: Thread-3: Hello World 2
+   Received: Thread-4: Hello World 3
 
 
 The :class:`ForkingMixIn` class is used in the same way, except that the server
index c078623d3b4ca0a39d3fef4867af92a5b9593bc0..100fcecf8da388d32d986bb241bed56e4a961d41 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -190,6 +190,12 @@ Extension Modules
 - Issue #12950: Fix passing file descriptors in multiprocessing, under
   OpenIndiana/Illumos.
 
+Documentation
+-------------
+
+- Issue #13141: Demonstrate recommended style for socketserver examples.
+
+
 What's New in Python 3.2.2?
 ===========================