mirror of
https://github.com/python/cpython.git
synced 2025-11-01 02:38:53 +00:00
parent
ef6a19e3ea
commit
06fd5f8cc8
5 changed files with 38 additions and 30 deletions
|
|
@ -56,7 +56,8 @@ def client():
|
||||||
line = sys.stdin.readline()
|
line = sys.stdin.readline()
|
||||||
if not line:
|
if not line:
|
||||||
break
|
break
|
||||||
s.sendto(line, addr)
|
print('addr = ', addr)
|
||||||
|
s.sendto(bytes(line, 'ascii'), addr)
|
||||||
data, fromaddr = s.recvfrom(BUFSIZE)
|
data, fromaddr = s.recvfrom(BUFSIZE)
|
||||||
print('client received %r from %r' % (data, fromaddr))
|
print('client received %r from %r' % (data, fromaddr))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ from socket import *
|
||||||
FILE = 'unix-socket'
|
FILE = 'unix-socket'
|
||||||
s = socket(AF_UNIX, SOCK_STREAM)
|
s = socket(AF_UNIX, SOCK_STREAM)
|
||||||
s.connect(FILE)
|
s.connect(FILE)
|
||||||
s.send('Hello, world')
|
s.send(b'Hello, world')
|
||||||
data = s.recv(1024)
|
data = s.recv(1024)
|
||||||
s.close()
|
s.close()
|
||||||
print('Received', repr(data))
|
print('Received', repr(data))
|
||||||
|
|
|
||||||
|
|
@ -336,8 +336,8 @@ This is the server side::
|
||||||
def handle(self):
|
def handle(self):
|
||||||
# self.request is the TCP socket connected to the client
|
# self.request is the TCP socket connected to the client
|
||||||
self.data = self.request.recv(1024).strip()
|
self.data = self.request.recv(1024).strip()
|
||||||
print "%s wrote:" % self.client_address[0]
|
print("%s wrote:" % self.client_address[0])
|
||||||
print self.data
|
print(self.data)
|
||||||
# just send back the same data, but upper-cased
|
# just send back the same data, but upper-cased
|
||||||
self.request.send(self.data.upper())
|
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;
|
# self.rfile is a file-like object created by the handler;
|
||||||
# we can now use e.g. readline() instead of raw recv() calls
|
# we can now use e.g. readline() instead of raw recv() calls
|
||||||
self.data = self.rfile.readline().strip()
|
self.data = self.rfile.readline().strip()
|
||||||
print "%s wrote:" % self.client_address[0]
|
print("%s wrote:" % self.client_address[0])
|
||||||
print self.data
|
print(self.data)
|
||||||
# Likewise, self.wfile is a file-like object used to write back
|
# Likewise, self.wfile is a file-like object used to write back
|
||||||
# to the client
|
# to the client
|
||||||
self.wfile.write(self.data.upper())
|
self.wfile.write(self.data.upper())
|
||||||
|
|
@ -385,14 +385,14 @@ This is the client side::
|
||||||
|
|
||||||
# Connect to server and send data
|
# Connect to server and send data
|
||||||
sock.connect((HOST, PORT))
|
sock.connect((HOST, PORT))
|
||||||
sock.send(data + "\n")
|
sock.send(bytes(data + "\n","utf8"))
|
||||||
|
|
||||||
# Receive data from the server and shut down
|
# Receive data from the server and shut down
|
||||||
received = sock.recv(1024)
|
received = sock.recv(1024)
|
||||||
sock.close()
|
sock.close()
|
||||||
|
|
||||||
print "Sent: %s" % data
|
print("Sent: %s" % data)
|
||||||
print "Received: %s" % received
|
print("Received: %s" % received)
|
||||||
|
|
||||||
|
|
||||||
The output of the example should look something like this:
|
The output of the example should look something like this:
|
||||||
|
|
@ -401,18 +401,18 @@ Server::
|
||||||
|
|
||||||
$ python TCPServer.py
|
$ python TCPServer.py
|
||||||
127.0.0.1 wrote:
|
127.0.0.1 wrote:
|
||||||
hello world with TCP
|
b'hello world with TCP'
|
||||||
127.0.0.1 wrote:
|
127.0.0.1 wrote:
|
||||||
python is nice
|
b'python is nice'
|
||||||
|
|
||||||
Client::
|
Client::
|
||||||
|
|
||||||
$ python TCPClient.py hello world with TCP
|
$ python TCPClient.py hello world with TCP
|
||||||
Sent: 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
|
$ python TCPClient.py python is nice
|
||||||
Sent: python is nice
|
Sent: python is nice
|
||||||
Received: PYTHON IS NICE
|
Received: b'PYTHON IS NICE'
|
||||||
|
|
||||||
|
|
||||||
:class:`socketserver.UDPServer` Example
|
:class:`socketserver.UDPServer` Example
|
||||||
|
|
@ -433,13 +433,13 @@ This is the server side::
|
||||||
def handle(self):
|
def handle(self):
|
||||||
data = self.request[0].strip()
|
data = self.request[0].strip()
|
||||||
socket = self.request[1]
|
socket = self.request[1]
|
||||||
print "%s wrote:" % self.client_address[0]
|
print("%s wrote:" % self.client_address[0])
|
||||||
print data
|
print(data)
|
||||||
socket.sendto(data.upper(), self.client_address)
|
socket.sendto(data.upper(), self.client_address)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
HOST, PORT = "localhost", 9999
|
HOST, PORT = "localhost", 9999
|
||||||
server = socketserver.UDPServer((HOST, PORT), BaseUDPRequestHandler)
|
server = socketserver.UDPServer((HOST, PORT), MyUDPHandler)
|
||||||
server.serve_forever()
|
server.serve_forever()
|
||||||
|
|
||||||
This is the client side::
|
This is the client side::
|
||||||
|
|
@ -447,7 +447,7 @@ This is the client side::
|
||||||
import socket
|
import socket
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
HOST, PORT = "localhost"
|
HOST, PORT = "localhost", 9999
|
||||||
data = " ".join(sys.argv[1:])
|
data = " ".join(sys.argv[1:])
|
||||||
|
|
||||||
# SOCK_DGRAM is the socket type to use for UDP sockets
|
# 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.
|
# As you can see, there is no connect() call; UDP has no connections.
|
||||||
# Instead, data is directly sent to the recipient via sendto().
|
# 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)
|
received = sock.recv(1024)
|
||||||
|
|
||||||
print "Sent: %s" % data
|
print("Sent: %s" % data)
|
||||||
print "Received: %s" % received
|
print("Received: %s" % received)
|
||||||
|
|
||||||
The output of the example should look exactly like for the TCP server example.
|
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):
|
def handle(self):
|
||||||
data = self.request.recv(1024)
|
data = self.request.recv(1024)
|
||||||
cur_thread = threading.current_thread()
|
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)
|
self.request.send(response)
|
||||||
|
|
||||||
class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
|
class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
|
||||||
|
|
@ -492,7 +492,7 @@ An example for the :class:`ThreadingMixIn` class::
|
||||||
sock.connect((ip, port))
|
sock.connect((ip, port))
|
||||||
sock.send(message)
|
sock.send(message)
|
||||||
response = sock.recv(1024)
|
response = sock.recv(1024)
|
||||||
print "Received: %s" % response
|
print("Received: %s" % response)
|
||||||
sock.close()
|
sock.close()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
@ -506,23 +506,24 @@ An example for the :class:`ThreadingMixIn` class::
|
||||||
# more thread for each request
|
# more thread for each request
|
||||||
server_thread = threading.Thread(target=server.serve_forever)
|
server_thread = threading.Thread(target=server.serve_forever)
|
||||||
# Exit the server thread when the main thread terminates
|
# Exit the server thread when the main thread terminates
|
||||||
server_thread.set_daemon(True)
|
server_thread.setDaemon(True)
|
||||||
server_thread.start()
|
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, b"Hello World 1")
|
||||||
client(ip, port, "Hello World 2")
|
client(ip, port, b"Hello World 2")
|
||||||
client(ip, port, "Hello World 3")
|
client(ip, port, b"Hello World 3")
|
||||||
|
|
||||||
server.shutdown()
|
server.shutdown()
|
||||||
|
|
||||||
|
|
||||||
The output of the example should look something like this::
|
The output of the example should look something like this::
|
||||||
|
|
||||||
$ python ThreadedTCPServer.py
|
$ python ThreadedTCPServer.py
|
||||||
Server loop running in thread: Thread-1
|
Server loop running in thread: Thread-1
|
||||||
Received: Thread-2: Hello World 1
|
Received: b"Thread-2: b'Hello World 1'"
|
||||||
Received: Thread-3: Hello World 2
|
Received: b"Thread-3: b'Hello World 2'"
|
||||||
Received: Thread-4: Hello World 3
|
Received: b"Thread-4: b'Hello World 3'"
|
||||||
|
|
||||||
|
|
||||||
The :class:`ForkingMixIn` class is used in the same way, except that the server
|
The :class:`ForkingMixIn` class is used in the same way, except that the server
|
||||||
|
|
|
||||||
|
|
@ -435,6 +435,7 @@ Martin von L
|
||||||
Andrew I MacIntyre
|
Andrew I MacIntyre
|
||||||
Tim MacKenzie
|
Tim MacKenzie
|
||||||
Nick Maclaren
|
Nick Maclaren
|
||||||
|
Don MacMillen
|
||||||
Steve Majewski
|
Steve Majewski
|
||||||
Grzegorz Makarewicz
|
Grzegorz Makarewicz
|
||||||
Ken Manheimer
|
Ken Manheimer
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,11 @@ Build
|
||||||
|
|
||||||
- Issue #1656675: Register a drop handler for .py* files on Windows.
|
- 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
|
What's New in Python 3.0 release candidate 2
|
||||||
============================================
|
============================================
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue