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中的文件I/O操作
May 24 Python
Python开发的HTTP库requests详解
Aug 29 Python
Python使用getpass库读取密码的示例
Oct 10 Python
Python爬虫实现百度图片自动下载
Feb 04 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
Mar 05 Python
Python读取mat文件,并转为csv文件的实例
Jul 04 Python
python读取Excel实例详解
Aug 17 Python
对Django url的几种使用方式详解
Aug 06 Python
Python warning警告出现的原因及忽略方法
Jan 31 Python
sklearn的predict_proba使用说明
Jun 28 Python
python调用私有属性的方法总结
Jul 24 Python
序列化Python对象的方法
Aug 01 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
php中通过Ajax如何实现异步文件上传的代码实例
2011/05/07 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
JQuery与Ajax调用新浪API获取短网址的代码
2014/02/07 Javascript
javascript的document.referrer浏览器支持、失效情况总结
2014/07/18 Javascript
javascript随机显示背景图片的方法
2015/06/18 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
详解nodejs 文本操作模块-fs模块(二)
2016/12/22 NodeJs
JavaScript简单生成 N~M 之间随机数的方法
2017/01/13 Javascript
提升页面加载速度的插件InstantClick
2017/09/12 Javascript
vue-router实现组件间的跳转(参数传递)
2017/11/07 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
vue选项卡切换登录方式小案例
2019/09/27 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
js canvas实现五子棋小游戏
2021/01/22 Javascript
[00:16]热血竞技场
2019/03/06 DOTA
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
appium+python adb常用命令分享
2020/03/06 Python
python 爬取百度文库并下载(免费文章限定)
2020/12/04 Python
Mountain Warehouse澳大利亚官网:欧洲家庭户外品牌倡导者
2016/11/20 全球购物
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
易程科技软件测试笔试
2013/03/24 面试题
物流仓储实习自我鉴定
2013/09/25 职场文书
写自荐信要注意什么
2013/12/26 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
部队反四风对照检查材料
2014/09/26 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
贷款工资证明范本
2015/06/12 职场文书
严以用权学习心得体会
2016/01/12 职场文书
基于Go语言构建RESTful API服务
2021/07/25 Golang
SpringBoot整合minio快速入门教程(代码示例)
2022/04/03 Java/Android
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android
js 实现验证码输入框示例详解
2022/09/23 Javascript