UDP协议
英文名:User Datagram Protocol
中文名:数据报协议
协议说明:UDP是一种面向无连接的传输层通信协议。
举例:发短信,不需要双方建立连接,数据报的大小应限制在64k以内
特点:效率高,数据传输不安全,容易丢包

import socket   #引入套接字模块
import threading  #引入多线程模块
import time   #引入定时模块
flag = 1  #定义个全局变量def receive(): #接收端global flag#1.创建一个套接字socket_udprecv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)   socket_add = ("", 8080)#2.绑定一个套接字socket_udprecv.bind(socket_add)  #套接字绑定自己的while True:if flag == 0:print("正在退出会话")break#3.接收数据socket_date = socket_udprecv.recvfrom(1024)  recv_msg = socket_date[0]recv_add = socket_date[1]#4.打印数据print("%s:%s" % (str(recv_add), recv_msg.decode("gbk")))#5.关闭套接字socket_udprecv.close()print("双方会话结束")def send():  #发送端global flag#1.创建套接字socket_udpsend = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  #socket_udprecv.bind(socket_add)  可以事先绑定好发送端的端口号,这样使用网络调试助手时,发送方的端口不会一直改变send_ip=input("请输入对方的ip")send_port=int(input("请输入对方的端口"))#2.定义要接收方的套接字send_udpip = (send_ip, send_port)while True:send_date = input("请输入要发送的内容,输入exit退出会话:")#3.发送数据socket_udpsend.sendto(send_date.encode("gbk"), send_udpip)if send_date == 'exit':flag = 0over ='会话结束,对方已经挂断'socket_udpsend.sendto(over.encode("gbk"), send_udpip)print("会话结束")break#4.关闭套接字socket_udpsend.close()def main():
#1.定义两个线程,让两端同时可以收发数据send_date = threading.Thread(target=send)receive_date = threading.Thread(target=receive)
#2.开始两个线程send_date.start()receive_date.start()time.sleep(1)if __name__ == "__main__":main()

接收端代码段

def receive(): #接收端global flag#1.创建一个套接字#  socket_udprecv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 其中AF_INET为ipv4协议,SOCK_DGRAM为UDP协议socket_udprecv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)   socket_add = ("", 8080)#2.绑定一个套接字#套接字=(ip地址+port端口号)socket_udprecv.bind(socket_add)  #套接字绑定自己的while True:if flag == 0:print("正在退出会话")break#3.接收数据,一次最大1024b,接收到接结果为一个元组,即为(接收到的信息,对方的套接字)socket_date = socket_udprecv.recvfrom(1024)  recv_msg = socket_date[0]  recv_add = socket_date[1]#4.打印数据# .decode("gbk")  decode为解码语句,gbk为编码方式,用gbk可以避免汉字乱码问题print("%s:%s" % (str(recv_add), recv_msg.decode("gbk")))#5.关闭套接字socket_udprecv.close()print("双方会话结束")

发送端代码

def send():  #发送端global flag#1.创建套接字#socket_udprecv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 其中AF_INET为ipv4协议,SOCK_DGRAM为UDP协议socket_udpsend = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  #2.定义要接收方的套接字send_ip=input("请输入对方的ip")send_port=int(input("请输入对方的端口"))send_udpip = (send_ip, send_port)while True:send_date = input("请输入要发送的内容,输入exit退出会话:")#3.发送数据#socket_udpsend.sendto(send_date.encode("gbk"), send_udpip)  encode为编码方法,  gbk为编码方式  能有效避免汉字乱码情况socket_udpsend.sendto(send_date.encode("gbk"), send_udpip)if send_date == 'exit':flag = 0over ='会话结束,对方已经挂断'socket_udpsend.sendto(over.encode("gbk"), send_udpip)print("会话结束")break#4.关闭套接字socket_udpsend.close()

测试:只有一台电脑的情况下,且没有虚拟机的情况下可以采用网络调试助手

效果为:
发送
接收

python制作一个简单的udp聊天器相关推荐

  1. 使用Python制作一个简单的刷博器

    呵呵,不得不佩服Python的强大,寥寥几句代码就能做一个简单的刷博器. import webbrowser as web import time import oscount=0 while cou ...

  2. Python搭建UDP网络通信模型,制作一个简单的私人聊天器~

    互联网的本质是什么? 其实就是信息的交换. 就比如我们常用的QQ.微信等. 那么如何将自己的信息发送到其他人的电脑上呢? 那就需要借助网络模型来完成这样的事情了. 今天就带领大家使用UDP网络模型来完 ...

  3. 如何用Python实现多任务版的udp聊天器

    这篇文章主要为大家详细介绍了Python实现多任务版的udp聊天器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一.案例示例 二.案例说明 1.编写一个有2个线程的程 ...

  4. Python制作一个简单的抽奖软件(二)

    Python制作一个简单的抽奖软件(二) 认识QT 因为都对 QT和tkinter都没用过,之前简单使用tkinter后发现,界面调整不太好弄.然后度娘了之后,QT是强大GUI库之一,很多人都推荐它. ...

  5. python实现雪花动态图_如何通过雪花算法用Python实现一个简单的发号器

    实现一个简单的发号器 根据snowflake算法的原理实现一个简单的发号器,产生不重复.自增的id. 1.snowflake算法的简单描述 这里的snowflake算法是用二进制的,有64位.其中41 ...

  6. 使用 Python 实现一个简单的智能聊天机器人

    使用 Python 实现一个简单的智能聊天机器人 文章目录 使用 Python 实现一个简单的智能聊天机器人 简要说明 总体的思路 需要准备的环境 接收用户的语音输入, 并将其存为音频文件 调用百度A ...

  7. Python高级——用多线程实现UDP聊天器

    思路分析 1.功能:(1)发送消息 (2)接收消息 (3)退出系统 2.架构: (1)发送消息:send_msg() (2)接收消息:recv_msg() (3)主入口:main() 发送消息:(1) ...

  8. 通过雪花(snowflake)算法用Python实现一个简单的发号器

    实现一个简单的发号器 根据snowflake算法的原理实现一个简单的发号器,产生不重复.自增的id. 1.snowflake算法的简单描述 这里的snowflake算法是用二进制的,有64位.其中41 ...

  9. Python制作一个多功能音乐播放器

    文章目录 一.制作播放器的思路 二.制作播放器知识点和所需模块 三.播放器的代码展示 一.制作播放器的思路 制作一个多功能音乐播放器的思路 确定播放器的需求和功能,例如支持哪些音频格式.播放列表管理. ...

最新文章

  1. 俄罗斯为何把微积分下放到中学讲授?
  2. 80-15-020-原理-零拷贝-Netty零拷贝的原理
  3. 实用的 Python —— 使用虚拟环境 virtualenv(Linux)
  4. python操作mysql批量插入
  5. 三因子两水平doe_温故而知新 | DOE实验设计学习系列之(三):多因子DOE的魅力 (附视频)...
  6. Python实现同义词替换(哈工大pyltp分词)
  7. 手机端如何破解wifi密码
  8. 北大青鸟软件工程师 ACCP6.0课程体系
  9. 公路自行车轮市场前景分析及行业研究报告
  10. 路由器无法登上管理IP地址
  11. android sqlite动态创建表,QT下如何实现SQLite动态创建表
  12. Windows 10 64bit 安装dotnetfx 3.5出错的解决办法(备忘)
  13. Convex Optimization介绍
  14. 莫名其妙的jsp错,引号内不能在使用引号
  15. Scipy.sparse中coo_matrix、csc_matrix、csr_matrix、lil_matrix区别与特点
  16. 交流电及整流滤波电路
  17. 教你怎样煮鸡蛋 煮软蛋 煮溏心蛋
  18. Jmeter组件-线程组(Thread Group)
  19. MATLAB算法实战应用案例精讲-【回归算法】偏最小二乘回归(PLS)(附MATLAB、R语言和Python代码)
  20. 该死的研华PCL-730数字IO板卡

热门文章

  1. html显示日志_如何实现类似“jenkins”的滚动日志功能?
  2. tt公路车Java配置怎么样_普通公路车换TT车把可以吗,别的东西还有需要换的吗?...
  3. 解决使用pip无法安装rasa与无限依赖告警:INFO: This is taking longer than usual. You might need to provide the....
  4. Mac 安装配置 chromedriver
  5. 小企业电脑如何组网_(完整版)中小型企业组网方案
  6. 10右键闪退到桌面_windows7多用户远程桌面如何设置
  7. awk if 不包含_linux高级运维必会命令——AWK命令详解及实例分享
  8. 1×pbs缓冲液配方_【应用】蒸渗仪与氧化还原电位的测量1
  9. 用servlet进行用户名和密码校验
  10. 深入理解Java类加载器(2)