diff --git a/Doc/library/socketserver.rst b/Doc/library/socketserver.rst
index 1d151a7..177c0b1 100644
--- a/Doc/library/socketserver.rst
+++ b/Doc/library/socketserver.rst
@@ -348,7 +348,7 @@
        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 @@
            # 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 @@
    # 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 @@
 
    $ 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 @@
        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 @@
 
    # 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 @@
    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 @@
    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 @@
        # 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 @@
 
    $ 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
diff --git a/Misc/NEWS b/Misc/NEWS
index c078623..100fcec 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -190,6 +190,12 @@
 - 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?
 ===========================
 
