代码清单2-1 使用自环接口的UDP服务器和客户端
import argparse
import socket
from datetime import datetime
MAX_BYTES = 65535
def server(port):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('127.0.0.2', port))
print('Listening at {}'.format(sock.getsockname()))
while True:
data, address = sock.recvfrom(MAX_BYTES)
text = data.decode('ascii')
print('The client at {} says {!r}'.format(address, text))
text = 'Your data was {} bytes long'.format(len(data))
data = text.encode('ascii')
sock.sendto(data, address)
def client(port):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
text = 'The time is {}'.format(datetime.now())
data = text.encode('ascii')
sock.sendto(data, ('127.0.0.2', port))
print('The OS assigned me the address {}'.format(sock.getsockname()))
"""我被分配的IPv4地址位:如果是0.0.0.1即为子码为1,服务器端显示为127.0.0.1"""
data, address = sock.recvfrom(MAX_BYTES)
text = data.decode('ascii')
print('The serve {} relied {!r}'.format(address, text))
choices = {'client': client, 'server': server}
parser = argparse.ArgumentParser(description='Send and receive UDP locally')
parser.add_argument('role', choices=choices, help='which role to play')
parser.add_argument('-p', metavar='PORT', type=int, default=1060, help='UDP port(default=1060)')
args = parser.parse_args()
function = choices[args.role]
function(args.p)