使用自环接口的UDP服务器和客户端
2024-09-06 18:14:20
import argparse,socket
from datetime import datetime MAX_BYTES = 65535 def server(port):
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #协议族AF_INET以及数据报类型SOCK_DGRAM.SOCK_DGRAM表示在IP网络上使用UDP协议
#要注意的是数据报datagram而不是数据包packet,用了表示应用层数据块传输的官方术语
sock.bind(('127.0.0.1',port)) #绑定一个UDP网络地址:一个二元组,包含一个IP地址和一个整形的UDP端口号
#端口号要大于1023,否则要管理员权限
print('Listening at {}'.format(sock.getsockname())) #查询套接字当前绑定的IP地址和端口号
while True: #会进入一个循环不断运行recvfromO
data,adress = sock.recvfrom(MAX_BYTES) #最长可接收65535字节的信息,也是UDP数据报可包含的最大长度,没有接收到永远等待
#一旦接收到数据报,返回两个值。1 发送该数据报的客户端地址 2 以字节表示数据报的内容
text = data.decode('ascii')
print('The client at {} says {!r}'.format(adress,text))
text = 'Your data was {} bytes long'.format(len(data))
data = text.encode('ascii')
sock.sendto(data,adress) 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.1',port)) #两个信息:要发送的信息和目标地址。这是向服务器发送数据报的唯一调用
print('The OS assigned me the adress {}'.format(sock.getsockname()))
data,adress = sock.recvfrom(MAX_BYTES)
text = data.decode('asicc')
print('The serve {} replied {!r}'.format(adress,text))
if __name__ == '__main__':
choices = {'client':client,'server':server}
parser = argparse.ArgmentParser(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)
最新文章
- SharePonit 2010 更改另存为列表模板的语言类型
- jQuery中width、innerWidth、outerWidth的区别
- 【整理】--【字符设备】cdev_init()/cdev_alloc(),cdev_add(),cdev_del()
- 【目录】Newlife XCode组件相关文章目录
- Linux入侵检测工具 - RKHunter
- (转)Eclipse平台技术概述
- awk文本处理知识汇总
- CKEditor如何统计文字数量
- javaScript 类型判断
- Ehcache 整合Spring 使用页面、对象缓存(转载)
- Android Studio的使用(八)--// TODO代码
- cocos 射线检测 3D物体 (Sprite3D点击)
- netsh自动配置网络
- 自己写的一个用js把select换成div与span与ul的东西
- 痞子衡嵌入式:ARM Cortex-M内核那些事(3)- 功能模块
- 爬虫_微信小程序社区教程(crawlspider)
- web自动化测试---概述
- mysql从库Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'报错处理
- 编写一个程序解决选择问题。令k=N/2。
- 大数据hadoop与spark的区别