TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。

使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达就不知道了。

虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议。

我们来看看如何通过UDP协议传输数据。和TCP类似,使用UDP的通信双方也分为客户端和服务器。服务器首先需要绑定端口:

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定端口:s.bind(('127.0.0.1', 9999))

创建Socket时,SOCK_DGRAM指定了这个Socket的类型是UDP。绑定端口和TCP一样,但是不需要调用listen()方法,而是直接接收来自任何客户端的数据:

print('Bind UDP on 9999...')while True:    # 接收数据:    data, addr = s.recvfrom(1024)    print('Received from %s:%s.' % addr)    s.sendto(b'Hello, %s!' % data, addr)

recvfrom()方法返回数据和客户端的地址与端口,这样,服务器收到数据后,直接调用sendto()就可以把数据用UDP发给客户端。

注意这里省掉了多线程,因为这个例子很简单。

客户端使用UDP时,首先仍然创建基于UDP的Socket,然后,不需要调用connect(),直接通过sendto()给服务器发数据:

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)for data in [b'Michael', b'Tracy', b'Sarah']:    # 发送数据:    s.sendto(data, ('127.0.0.1', 9999))    # 接收数据:    print(s.recv(1024).decode('utf-8'))s.close()

从服务器接收数据仍然调用recv()方法。

仍然用两个命令行分别启动服务器和客户端测试,UDP的使用与TCP类似,但是不需要建立连接。此外,服务器绑定UDP端口和TCP端口互不冲突,也就是说,UDP的9999端口与TCP的9999端口可以各自绑定。

linux c语言 udp 接收和发送数据用同一个端口_【Python学习笔记】80、UDP编程相关推荐

  1. linux c语言 udp 接收和发送数据用同一个端口_网络编程基础入门及TCP,UDP

    1.网络编程入门 1.1 网络编程概述 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享 ...

  2. python字符串与列表与运算_[Python学习笔记1]Python语言基础 数学运算符 字符串 列表...

    这个系列是我在学习Python语言的过程中记录的笔记,主要是一些知识点汇总,而非学习教程,可供有一定编程基础者参考.文中偏见和不足难以避免,仅供参考,欢迎批评指正. 本系列笔记主要参考文献是官网文档: ...

  3. 大智慧数据文件python_马克的Python学习笔记#模块和包 3

    让目录或者zip文件成为可以运行的脚本 我们的程序已经从一个简单的脚本进化为一个涉及多个文件的应用.我们希望能有某种简单的方式来让用户运行这个程序 如果应用程序已经进化为由多个文件组成的"庞 ...

  4. python制作查询网页_peewee数据查询之分页返回——python学习笔记

    请求示例: 后端代码# 查询客服列表 @kf.route("/list", methods=['POST']) def kf_list(): start = request.val ...

  5. 中移4G模块-ML302-OpenCpu开发-(MQTT连接阿里云-接收和发送数据)

    B站:https://space.bilibili.com/309103931 中移4G模块-ML302专栏:https://blog.csdn.net/qq_33259323/category_10 ...

  6. Python学习笔记---merge和concat数据合并(1)

    Python学习笔记-merge和concat数据合并(1) Python学习笔记-merge和concat数据合并(2) 文章目录 Python学习笔记---merge和concat数据合并(1) ...

  7. 上位机开发C#语言:模拟STC串口助手接收单片机发送数据

    题目概述: 设计一个模拟STC串口助手,通过串口进行接收或发送数据. STC串口助手: 编程: using System; using System.Collections.Generic; usin ...

  8. C# SuperSocket 手把手教你入门 傻瓜教程---1(服务器单向接收客户端发送数据)

    C# SuperSocket 手把手教你入门 傻瓜教程系列教程 C# SuperSocket 手把手教你入门 傻瓜教程---1(服务器单向接收客户端发送数据) C# SuperSocket 手把手教你 ...

  9. java使用Socket类接收和发送数据

    java使用Socket类接收和发送数据 网络应用分为客户端和服务端两部分,而Socket类是负责处理客户端通信的Java类.通过这个类可以连接到指定IP或域名的服务器上,并且可以和服务器互相发送和接 ...

最新文章

  1. JPA基础(八):分析JPA与持久化实现产品对接的源代码
  2. NYOJ 674 善良的国王(树形背包DP)
  3. Android进程优先级architecture : low memory killer (/system/core/lmkd/lmkd.c)
  4. Flask对请求的处理
  5. auto与迭代器的用法_C++ STL move_iterator移动迭代器用法详解
  6. 开源推荐:.Net Core3.1 + EF Core + LayUI 封装的MVC版后台管理系统
  7. 命令行下 mysql 不是内部或外部命令排查方法
  8. Bootstarp4 列表组
  9. Java 蓝桥杯 分解质因数
  10. 函数在某点附近有界,但该点无极限值的例子
  11. C++fseek函数
  12. html MP4视频浏览器播放黑屏
  13. 新西兰计算机预科学费,新西兰留学预科学费
  14. 【PTA|Python】浙大版《Python 程序设计》题目集:函数练习
  15. 计算机采用什么交换技术,计算机 交换技术是什么?
  16. Could not load the Qt platform plugin “xcb“ 问题解决
  17. 电脑音频格式转换的方法步骤
  18. git push 出现 The current branch dev has no upstream branch.的问题
  19. 龙卷风收音机客户端电台数据解密算法
  20. Sping的AOP理解

热门文章

  1. GitLab地域封锁,总监愤而辞职!苹果产品路线图曝光;CAT 0.1.0发布|极客头条...
  2. 利用 50 行 Python 代码构建一个在线文本生成器!
  3. Spring Boot 2.2 正式发布,大幅性能提升 Java 13 支持 | CSDN 博文精选
  4. 我为什么反对 Google 拍卖 Android 搜索引擎选项?
  5. 9 年前他用 1 万个比特币买两个披萨, 9 年后他把当年的代码卖给苹果, 成 GPU 挖矿之父...
  6. 代码有温度 科技需向善
  7. 漫画:如何给女朋友解释为什么200M宽带,打王者荣耀还是会有460的延迟?
  8. 程序员分析了 50 万条拼多多商品数据,告诉你到底是消费升级还是降级!
  9. BAT 争抢的全栈工程师真的存在?
  10. 开发者如何区分 5G 和 LTE 技术?