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中使用中文的方法
Feb 19 Python
详解Python的Twisted框架中reactor事件管理器的用法
May 25 Python
浅谈Python中的可变对象和不可变对象
Jul 07 Python
Python正则捕获操作示例
Aug 19 Python
基于python实现学生管理系统
Oct 17 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
Nov 10 Python
Python面向对象之类和对象实例详解
Dec 10 Python
Python视频编辑库MoviePy的使用
Apr 01 Python
浅谈Python爬虫原理与数据抓取
Jul 21 Python
Python利用myqr库创建自己的二维码
Nov 24 Python
python regex库实例用法总结
Jan 03 Python
python中添加模块导入路径的方法
Feb 03 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 insert语法详解
2008/06/07 PHP
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
ThinkPHP分页类使用详解
2014/03/05 PHP
PHP Yii框架之表单验证规则大全
2015/11/16 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
YII框架批量插入数据的方法
2017/03/18 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
extjs grid取到数据而不显示的解决
2008/12/29 Javascript
使用JQuery进行跨域请求
2010/01/25 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
2014/05/28 Javascript
JS获取各种宽度、高度的简单介绍
2014/12/19 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
Javascript实现代码折叠功能
2016/08/25 Javascript
js实现倒计时及时间对象
2016/11/15 Javascript
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
2017/03/11 Javascript
Vue实战之vue登录验证的实现代码
2017/10/31 Javascript
JS二分查找算法详解
2017/11/01 Javascript
Node.js创建Web、TCP服务器
2017/12/05 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
js实现计时器秒表功能
2019/12/16 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
Python 对象中的数据类型
2017/05/13 Python
Python zip()函数用法实例分析
2018/03/17 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
python定义类self用法实例解析
2020/01/22 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
网络编辑岗位职责
2014/03/18 职场文书
辞旧迎新演讲稿
2014/09/15 职场文书
乡党政领导班子群众路线教育实践活动个人对照检查材料
2014/09/20 职场文书
酒店圣诞节活动总结
2015/05/06 职场文书