使用自环接口的UDP服务器和客户端
Posted hefang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用自环接口的UDP服务器和客户端相关的知识,希望对你有一定的参考价值。
# 使用自换接口的UDP服务器和客户端 # UDP client and server on localhost # 本地主机上的UDP客户端和服务器 import sys import argparse #命令行选项与参数解析 import socket #套接字 from datetime import datetime #日期时间模块的日期时间函数 import sys MAX_BYTES = 65535 def server(port): #定义一个服务器函数 入口 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 创建了一个空套接字 并 标记了所属的特定类别:协议族AF_INET,与数据报类型SOCK_DGRAM(数据报datagram,不是数据包(packet)。 sock.bind((‘127.0.0.1‘, port)) # bind()命令请求绑定一个UDP网络地址,有简单的python二元组构成,包含了一个ip和一个整型的UDP端口号。如果被占用将报错。[errno98] print(‘Listening at {}‘.format(sock.getsockname())) # 打印出目前套接字绑定到的IP地址以及端口。通过socket 函数的getsockname()方法,获取包含此信息的二元组 while True: # 套接字绑定成功后,服务器循环接受请求! data, address = sock.recvfrom(MAX_BYTES) #不断的运行recvfrom(),一旦接受到一个数据报 recvfrom()就会返回两个值。# 第一个是发送该数据报的客户端地址,第二个是以字节表示的数据报内容。 #recvfrom(MAX_BYTES)表示可接受最长为65535字节的信息(这也是一个UDP数据报可以包含的最大长度), #data(数据) address(地址) text = data.decode(‘ascii‘) #data用ascii解码 直接将字节转化为字符串 print(‘The client at {} says {!r}‘.format(address, text)) #在客户端输出# 客户端在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‘) # data用ascii解码 sock.sendto(data, (‘127.0.0.1‘ , port)) print(‘The OS assigned me the address {}‘.format(sock.getsockname())) data, address = sock.recvfrom(MAX_BYTES) #danger text = data.decode(‘ascii‘) print(‘The server {} replied {!r}‘.format(address, text)) if __name__ == ‘__main__‘ : 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‘) # 函数add_argumen()第一个是选项,第二个是数据类型,第三个默认值,第四个是help命令时的说明 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) #在CMD中运行 python UDP2.2.py server python UDP2.2.py client
以上是关于使用自环接口的UDP服务器和客户端的主要内容,如果未能解决你的问题,请参考以下文章