python网络编程 使用UDP、TCP协议收发信息详解


Posted in Python onAugust 29, 2019

UDP

UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。 UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内。 UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。

udp通信模型中,在通信开始之前,不需要建立相关的链接,只需要发送数据即可,类似于生活中,"写信"。

客户端:

from socket import socket,AF_INET,SOCK_DGRAM
# 创建套接字,SOCK_DGRAM使用udp协议
udp = socket(AF_INET, SOCK_DGRAM)
# 目的端口和ip
ip = "127.0.0.1"
port = 8080
# 循环从键盘输入发送消息
while True:
  data = input("请输入发送的数据:")
  udp.sendto(data.encode("utf-8"), (ip, port))

服务端:

from socket import socket, AF_INET, SOCK_DGRAM
udp = socket(AF_INET, SOCK_DGRAM)
# 绑定端口,服务端必须要绑定端口
udp.bind(("", 8080))
while True:
  # 接受数据,每次接受1024字节
  recvData = udp.recvfrom(1024)
  # 拆包
  data, info = recvData
  # 打印
  print("[%s]:%s" % (info, data.decode("utf-8")))

TCP

udp通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,"打电话"。

客户端:

from socket import socket,AF_INET,SOCK_STREAM
# 创建套接字,SOCK_STREAM表示使用tcp协议
clientSocket = socket(AF_INET,SOCK_STREAM)
# 连接服务器
clientSocket.connect(("127.0.0.1",8080))
# 发送数据
while True:
  s = input("请输入要发送的数据:")
  clientSocket.send(s.encode("utf-8"))

服务端:

from socket import socket, AF_INET, SOCK_STREAM
tcp = socket(AF_INET, SOCK_STREAM)
# 绑定端口
tcp.bind(("", 8080))
# listen的参数代表可建立socket连接的最大个数 windows,mac 此连接参数有效 Linux 此连接参数无效,默认最大
tcp.listen()
# 有新的客户端连接时,
# clientSocket表示一个新的套接字
# clientInfo 表示新客户端的ip及端口号
while True:
  clientSocket, clientInfo = tcp.accept()
  try:
    while True:
      recvData = clientSocket.recv(1024)
      # 如果接受的的数据为空就退出
      if not recvData:
        break
      print("%s:%s" % (str(clientInfo), recvData.decode("utf-8")))
  finally:
    clientSocket.close()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python写的贪吃蛇游戏例子
Jun 16 Python
Python面向对象之继承代码详解
Jan 29 Python
python format 格式化输出方法
Jul 16 Python
python 读取鼠标点击坐标的实例
Dec 29 Python
Python根据当前日期取去年同星期日期
Apr 14 Python
Python自定义函数计算给定日期是该年第几天的方法示例
May 30 Python
Python 中Django安装和使用教程详解
Jul 03 Python
python区块及区块链的开发详解
Jul 03 Python
python 实现将多条曲线画在一幅图上的方法
Jul 07 Python
python 进程间数据共享multiProcess.Manger实现解析
Sep 23 Python
Pandas时间序列:重采样及频率转换方式
Dec 26 Python
Python time库的时间时钟处理
May 02 Python
使用OpenCV实现仿射变换—缩放功能
Aug 29 #Python
python实现两个文件夹的同步
Aug 29 #Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 #Python
python+rsync精确同步指定格式文件
Aug 29 #Python
django-rest-swagger对API接口注释的方法
Aug 29 #Python
Python3视频转字符动画的实例代码
Aug 29 #Python
scikit-learn线性回归,多元回归,多项式回归的实现
Aug 29 #Python
You might like
oracle资料库函式库
2006/10/09 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
jQuery 页面 Mask实现代码
2010/01/09 Javascript
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
Document对象内容集合(比较全)
2010/09/06 Javascript
javascript正则匹配汉字、数字、字母、下划线
2014/04/10 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
2015/10/23 Javascript
js中使用使用原型(prototype)定义方法的好处详解
2016/07/04 Javascript
js实现无缝循环滚动
2020/06/23 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
vue中使用cropperjs的方法
2018/03/01 Javascript
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
2019/06/06 Javascript
JavaScript 监听组合按键思路及代码实现
2020/07/28 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
从表单校验看JavaScript策略模式的使用详解
2020/10/17 Javascript
React中使用Vditor自定义图片详解
2020/12/25 Javascript
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
Windows下PyCharm安装图文教程
2018/08/27 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
Python tkinter和exe打包的方法
2020/02/05 Python
python 多线程中join()的作用
2020/10/29 Python
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
Capitol Lighting的1800lighting.com:住宅和商业照明
2019/04/10 全球购物
幼儿园中班上学期评语
2014/04/18 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
个人批评与自我批评
2014/10/15 职场文书
个人年终总结开头
2015/03/06 职场文书
永不妥协观后感
2015/06/10 职场文书
2016年“世界气象日”广播稿
2015/12/17 职场文书
六年级语文教学反思
2016/03/03 职场文书
Python实现查询剪贴板自动匹配信息的思路详解
2021/07/09 Python
MySQL创建定时任务
2022/01/22 MySQL
Redis特殊数据类型bitmap位图
2022/06/01 Redis