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之入门(三)序列
May 25 Python
python获得两个数组交集、并集、差集的方法
Mar 27 Python
python 全局变量的import机制介绍
Sep 07 Python
python3实现字符串操作的实例代码
Apr 16 Python
python判断文件夹内是否存在指定后缀文件的实例
Jun 10 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
Python实现性能自动化测试竟然如此简单
Jul 30 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
Apr 09 Python
python读取yaml文件后修改写入本地实例
Apr 27 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 01 Python
如何将Pycharm中调整字体大小的方式设置为"ctrl+鼠标滚轮上下滑"
Nov 17 Python
python基于OpenCV模板匹配识别图片中的数字
Mar 31 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
人大复印资料处理程序_补充篇
2006/10/09 PHP
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
js+FSO遍历文件夹下文件并显示
2007/03/07 Javascript
JavaScript面向对象之静态与非静态类
2010/02/03 Javascript
由Javascript实现的页面日历
2011/11/04 Javascript
圣诞节Merry Christmas给博客添加浪漫的下雪效果基于jquery实现
2012/12/27 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
2013/04/21 Javascript
jQuery插件制作之全局函数用法实例
2015/06/01 Javascript
《JavaScript函数式编程》读后感
2015/08/07 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
JS重载实现方法分析
2016/12/16 Javascript
Vue.js -- 过滤器使用总结
2017/02/18 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
vue项目实战总结篇
2018/02/11 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
详解Django框架中的视图级缓存
2015/07/23 Python
python判断字符串编码的简单实现方法(使用chardet)
2016/07/01 Python
Python3使用Matplotlib 绘制精美的数学函数图形
2019/04/11 Python
python aiohttp的使用详解
2019/06/20 Python
使用pyinstaller逆向.pyc文件
2019/12/20 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
2020/04/14 Python
庆国庆活动总结
2014/08/28 职场文书
施工安全协议书范本
2014/09/26 职场文书
企业投资意向书
2015/05/09 职场文书
2015年司法局工作总结
2015/05/22 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
学校学期工作总结
2015/08/13 职场文书
2016年优秀党员教师先进事迹材料
2016/02/29 职场文书
民政局2016年“六一”儿童节慰问活动总结
2016/04/06 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL