Merge 3.2
This commit is contained in:
commit
e9126b5e3b
|
@ -361,7 +361,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())
|
||||
|
@ -385,7 +385,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
|
||||
|
@ -408,16 +408,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:
|
||||
|
@ -434,10 +436,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
|
||||
|
@ -458,7 +460,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)
|
||||
|
||||
|
@ -480,11 +482,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.
|
||||
|
||||
|
@ -504,9 +506,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):
|
||||
|
@ -515,10 +517,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
|
||||
|
@ -531,13 +535,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()
|
||||
|
||||
|
@ -546,9 +550,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
|
||||
|
|
Loading…
Reference in New Issue