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 相关文章推荐
使用cx_freeze把python打包exe示例
Jan 24 Python
解决python写的windows服务不能启动的问题
Apr 15 Python
python实现计算倒数的方法
Jul 11 Python
python计算auc指标实例
Jul 13 Python
Python3实现简单可学习的手写体识别(实例讲解)
Oct 21 Python
python re模块findall()函数实例解析
Jan 19 Python
Flask框架各种常见装饰器示例
Jul 17 Python
使用python实现mqtt的发布和订阅
May 05 Python
Python3.7黑帽编程之病毒篇(基础篇)
Feb 04 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
Mar 12 Python
pytorch实现查看当前学习率
Jun 24 Python
Python趣味爬虫之用Python实现智慧校园一键评教
May 28 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中Date获取时间不正确怎么办
2008/06/05 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
2017/05/03 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
js写一个弹出层并锁屏效果实现代码
2012/12/07 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
HTTP 304错误的详细讲解
2013/11/13 Javascript
js中判断对象是否为空的三种实现方法
2013/12/23 Javascript
js+html5实现canvas绘制镂空字体文本的方法
2015/06/05 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
JS组件系列之使用HTML标签的data属性初始化JS组件
2016/09/14 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
2017/02/10 Javascript
Vue2几种常见开局方式详解
2017/09/09 Javascript
ECMAScript6变量的解构赋值实例详解
2017/09/19 Javascript
深入浅析ES6 Class 中的 super 关键字
2017/10/20 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
如何在Vue.JS中使用图标组件
2020/08/04 Javascript
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
详解Django的CSRF认证实现
2018/10/09 Python
Python判断一个三位数是否为水仙花数的示例
2018/11/13 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
2019/08/07 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
Python 转换RGB颜色值的示例代码
2019/10/13 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
初中三好学生自我鉴定
2014/04/07 职场文书
银行招聘自荐信
2015/03/06 职场文书
2015年银行柜员工作总结报告
2015/04/01 职场文书
新课程改革心得体会
2016/01/22 职场文书
Python Pygame实战在打砖块游戏的实现
2022/03/17 Python
【海涛DOTA】D-cup邀请赛NV.cn vs DT.Love
2022/04/01 DOTA