mirror of
https://github.com/python/cpython.git
synced 2025-11-25 04:34:37 +00:00
Issue #13141: Demonstrate recommended style for SocketServer examples.
This commit is contained in:
parent
c8065e46fe
commit
df10d7cb97
2 changed files with 32 additions and 21 deletions
|
|
@ -225,6 +225,7 @@ The server classes support the following class variables:
|
|||
desired. If :meth:`handle_request` receives no incoming requests within the
|
||||
timeout period, the :meth:`handle_timeout` method is called.
|
||||
|
||||
|
||||
There are various server methods that can be overridden by subclasses of base
|
||||
server classes like :class:`TCPServer`; these methods aren't useful to external
|
||||
users of the server object.
|
||||
|
|
@ -355,7 +356,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())
|
||||
|
|
@ -379,7 +380,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
|
||||
|
|
@ -402,16 +403,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(data + "\n")
|
||||
try:
|
||||
# Connect to server and send data
|
||||
sock.connect((HOST, PORT))
|
||||
sock.send(data + "\n")
|
||||
|
||||
# Receive data from the server and shut down
|
||||
received = sock.recv(1024)
|
||||
sock.close()
|
||||
# Receive data from the server and shut down
|
||||
received = sock.recv(1024)
|
||||
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:
|
||||
|
|
@ -452,7 +455,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)
|
||||
|
||||
|
|
@ -477,8 +480,8 @@ This is the client side::
|
|||
sock.sendto(data + "\n", (HOST, PORT))
|
||||
received = sock.recv(1024)
|
||||
|
||||
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.
|
||||
|
||||
|
|
@ -499,8 +502,8 @@ An example for the :class:`ThreadingMixIn` class::
|
|||
|
||||
def handle(self):
|
||||
data = self.request.recv(1024)
|
||||
cur_thread = threading.currentThread()
|
||||
response = "%s: %s" % (cur_thread.getName(), data)
|
||||
cur_thread = threading.current_thread()
|
||||
response = "{}: {}".format(cur_thread.name, data)
|
||||
self.request.send(response)
|
||||
|
||||
class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
|
||||
|
|
@ -509,10 +512,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(message)
|
||||
response = sock.recv(1024)
|
||||
print "Received: {}".format(response)
|
||||
finally:
|
||||
sock.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Port 0 means to select an arbitrary unused port
|
||||
|
|
@ -525,9 +530,9 @@ 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.getName()
|
||||
print "Server loop running in thread:", server_thread.name
|
||||
|
||||
client(ip, port, "Hello World 1")
|
||||
client(ip, port, "Hello World 2")
|
||||
|
|
@ -535,6 +540,7 @@ An example for the :class:`ThreadingMixIn` class::
|
|||
|
||||
server.shutdown()
|
||||
|
||||
|
||||
The output of the example should look something like this::
|
||||
|
||||
$ python ThreadedTCPServer.py
|
||||
|
|
|
|||
|
|
@ -342,6 +342,11 @@ Tests
|
|||
- Issue #12057: Add tests for ISO 2022 codecs (iso2022_jp, iso2022_jp_2,
|
||||
iso2022_kr).
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
|
||||
- Issue #13141: Demonstrate recommended style for SocketServer examples.
|
||||
|
||||
|
||||
What's New in Python 2.7.2?
|
||||
===========================
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue