Python Day 27 网络编程 (socket udp)
基于UDP协议的socket
udp是无链接的,启动服务之后可以直接接受消息,不需要提前建立链接.
sk = socket.socket(type=socket.SOCK_DGRAM) #指定socket协议类型
msg_r,addr = sk.recvfrom(1024) #接受一个消息
sk.sendto(msg_s.encode('utf-8'),('127.0.0.1',8091)) #发给谁一个消息
简单版:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#一次收发 import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1',8091)) msg_r,addr = sk.recvfrom(1024) #接受一个消息 print('Receive:',msg_r.decode('utf-8')) msg_s = 'hello,client' sk.sendto(msg_s.encode('utf-8'),addr) #发给谁一个消息 print('Reply:',msg_s) sk.close()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#一次收发 import socket sk = socket.socket(type=socket.SOCK_DGRAM) msg_s = 'hello,server' sk.sendto(msg_s.encode('utf-8'),('127.0.0.1',8091)) #发给谁一个消息 msg_r,addr = sk.recvfrom(1024) #接受一个消息 print('Receive:',msg_r.decode('utf-8')) sk.close()
多次收发
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 多次收发 import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1', 8091)) user_dict = {} while True: msg_r, addr = sk.recvfrom(1024) msg_r = msg_r.decode('utf-8') if msg_r.upper() == 'Q':break elif 'name:' not in msg_r and user_dict.get(addr) == None: sk.sendto('你好啊,请提供你的名字格式为 name:张三 方便我们聊天.'.encode('utf-8'), addr) elif 'name:' in msg_r and user_dict.get(addr) == None: username = msg_r.split(":")[-1] if username in user_dict.values(): sk.sendto('你好{},请换个名字,已经被用啦'.format(username).encode('utf-8'), addr) print('%s%s注册失败,名字重复' % (username, addr)) else: user_dict[addr] = username sk.sendto('你好{},开始交流吧!'.format(username).encode('utf-8'), addr) print('%s%s注册成功' % (username, addr)) else: print('Receive:%s%s Message:%s' % (user_dict[addr], addr, msg_r)) msg_s = input('>>>') sk.sendto(msg_s.encode('utf-8'), addr) if msg_s.upper() == 'Q': break print('Reply%s: %s' % (user_dict[addr], msg_s)) sk.close()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 多次收发 import socket sk = socket.socket(type=socket.SOCK_DGRAM) print('请输入你的名字') while True: msg_s = input('>>>') if msg_s.upper() == 'Q':break if times == 1: msg_s = 'name:'+msg_s sk.sendto(msg_s.encode('utf-8'), ('127.0.0.1', 8091)) msg_r, addr = sk.recvfrom(1024) if msg_r.decode('utf-8').upper() == 'Q': break print('Receive:', msg_r.decode('utf-8')) sk.close()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#格式: 设置颜色开始 : 33[显示方式;前景色;背景色m #说明: 前景色 背景色 颜色 --------------------------------------- 40 黑色 41 红色 42 绿色 43 黃色 44 蓝色 45 紫红色 46 青蓝色 47 白色 显示方式 意义 ------------------------- 终端默认设置 高亮显示 使用下划线 闪烁 反白显示 不可见 #例子: 33[1;31;40m <!--1-高亮显示 31-前景色红色 40-背景色黑色--> 033[0m <!--采用终端默认设置,即取消颜色设置-->
带颜色和署名的聊天
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 多次收发,带颜色 import socket import random sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('192.168.12.59', 8091)) user_dict = {} color_list = [] def color_msg(addr,*args): if addr in user_dict and len(user_dict[addr]) == 1: while True: if len(color_list) == 64: color = '