python制作一个简单的udp聊天器
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聊天器相关推荐
- 使用Python制作一个简单的刷博器
呵呵,不得不佩服Python的强大,寥寥几句代码就能做一个简单的刷博器. import webbrowser as web import time import oscount=0 while cou ...
- Python搭建UDP网络通信模型,制作一个简单的私人聊天器~
互联网的本质是什么? 其实就是信息的交换. 就比如我们常用的QQ.微信等. 那么如何将自己的信息发送到其他人的电脑上呢? 那就需要借助网络模型来完成这样的事情了. 今天就带领大家使用UDP网络模型来完 ...
- 如何用Python实现多任务版的udp聊天器
这篇文章主要为大家详细介绍了Python实现多任务版的udp聊天器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一.案例示例 二.案例说明 1.编写一个有2个线程的程 ...
- Python制作一个简单的抽奖软件(二)
Python制作一个简单的抽奖软件(二) 认识QT 因为都对 QT和tkinter都没用过,之前简单使用tkinter后发现,界面调整不太好弄.然后度娘了之后,QT是强大GUI库之一,很多人都推荐它. ...
- python实现雪花动态图_如何通过雪花算法用Python实现一个简单的发号器
实现一个简单的发号器 根据snowflake算法的原理实现一个简单的发号器,产生不重复.自增的id. 1.snowflake算法的简单描述 这里的snowflake算法是用二进制的,有64位.其中41 ...
- 使用 Python 实现一个简单的智能聊天机器人
使用 Python 实现一个简单的智能聊天机器人 文章目录 使用 Python 实现一个简单的智能聊天机器人 简要说明 总体的思路 需要准备的环境 接收用户的语音输入, 并将其存为音频文件 调用百度A ...
- Python高级——用多线程实现UDP聊天器
思路分析 1.功能:(1)发送消息 (2)接收消息 (3)退出系统 2.架构: (1)发送消息:send_msg() (2)接收消息:recv_msg() (3)主入口:main() 发送消息:(1) ...
- 通过雪花(snowflake)算法用Python实现一个简单的发号器
实现一个简单的发号器 根据snowflake算法的原理实现一个简单的发号器,产生不重复.自增的id. 1.snowflake算法的简单描述 这里的snowflake算法是用二进制的,有64位.其中41 ...
- Python制作一个多功能音乐播放器
文章目录 一.制作播放器的思路 二.制作播放器知识点和所需模块 三.播放器的代码展示 一.制作播放器的思路 制作一个多功能音乐播放器的思路 确定播放器的需求和功能,例如支持哪些音频格式.播放列表管理. ...
最新文章
- 俄罗斯为何把微积分下放到中学讲授?
- 80-15-020-原理-零拷贝-Netty零拷贝的原理
- 实用的 Python —— 使用虚拟环境 virtualenv(Linux)
- python操作mysql批量插入
- 三因子两水平doe_温故而知新 | DOE实验设计学习系列之(三):多因子DOE的魅力 (附视频)...
- Python实现同义词替换(哈工大pyltp分词)
- 手机端如何破解wifi密码
- 北大青鸟软件工程师 ACCP6.0课程体系
- 公路自行车轮市场前景分析及行业研究报告
- 路由器无法登上管理IP地址
- android sqlite动态创建表,QT下如何实现SQLite动态创建表
- Windows 10 64bit 安装dotnetfx 3.5出错的解决办法(备忘)
- Convex Optimization介绍
- 莫名其妙的jsp错,引号内不能在使用引号
- Scipy.sparse中coo_matrix、csc_matrix、csr_matrix、lil_matrix区别与特点
- 交流电及整流滤波电路
- 教你怎样煮鸡蛋 煮软蛋 煮溏心蛋
- Jmeter组件-线程组(Thread Group)
- MATLAB算法实战应用案例精讲-【回归算法】偏最小二乘回归(PLS)(附MATLAB、R语言和Python代码)
- 该死的研华PCL-730数字IO板卡
热门文章
- html显示日志_如何实现类似“jenkins”的滚动日志功能?
- tt公路车Java配置怎么样_普通公路车换TT车把可以吗,别的东西还有需要换的吗?...
- 解决使用pip无法安装rasa与无限依赖告警:INFO: This is taking longer than usual. You might need to provide the....
- Mac 安装配置 chromedriver
- 小企业电脑如何组网_(完整版)中小型企业组网方案
- 10右键闪退到桌面_windows7多用户远程桌面如何设置
- awk if 不包含_linux高级运维必会命令——AWK命令详解及实例分享
- 1×pbs缓冲液配方_【应用】蒸渗仪与氧化还原电位的测量1
- 用servlet进行用户名和密码校验
- 深入理解Java类加载器(2)