Python网络编程之UDP协议

这篇具有很好参考价值的文章主要介绍了Python网络编程之UDP协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Hello,大家好。本期来和大家一起学习一下网络编程UDP的相关知识。

基础知识补充

ip

ip地址:用来在网络中标记一台电脑,在本地局域网上是唯一的。

查看电脑ip地址:ipconfig(win)/ifconfig(linux/mac)

端口

端口:设备与外界通讯交流的出口

一共有65536个(0 - 65535) 端口

知名端口是众所周知的端口号。范围从0到1023

例如:443:HTTPS 80:HTTP ...

动态端口一般不固定分配某种服务,而是动态分配。范围是从1024到65535

TCP/IP协议

TCP/IP协议是一个协议簇。里面包括了很多协议,之所以命名为TCP/IP协议,是因为TCP、IP协议是两个很重要的协议。

python网络编程用的两种协议:TCP、UDP通过这两种协议将字节码进行网络传输的。

Python编码转换

str->bytes:encode(编码)

bytes->str:decode(解码)

使用方式:

bytes.decode(encoding="utf-8", errors="strict")
str.encode(encoding="utf-8", errors="strict")

errors:错误的处理方案。

encoding:解码编码过程中使用的编码(此处指“编码方案”是名词)

示例:

text = '我是文本'

bytesText = text.encode(encoding="utf-8", errors="strict")
print(bytesText)  # b'\xe6\x88\x91\xe6\x98\xaf\xe6\x96\x87\xe6\x9c\xac'
strText = bytesText.decode(encoding="utf-8", errors="strict")
print(strText)  # 我是文本

socket套接字

不同电脑上的进程之间如何通信?

1台电脑上是通过进程号(PID)来唯一标识一个进程,但是在网络中这是行不通的。

其实TCP/IP协议已经帮我们解决了这个问题。

网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用进程。

这样利用ip地址+协议+端口就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。

什么是socket?

socket(简称 套接字)是进程间通信的一种方式,它与其他进程间通信的主要不同是:

它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 socket 来完成通信的。

例如我们每天浏览的网页、QQ 聊天、收发 email 等等。

python udp,python,网络,udp,python,Powered by 金山文档

创建socket

套接字使用流程:

  • 创建套接字

  • 使用套接字收/发数据

  • 关闭套接字

import socket
socket_ = socket.socket(AddressFamily, Type)
# AddressFamily: socket.AF_INET(用于Internet进程之间通信)、socket.AF_UNIX(用于同一台机器进程间通信)
# Type:socket.SOCK_STREAM(tcp)、socket.SOCK_DGRAM(udp)

创建一个tcp socket(tcp套接字)

import socket

# 创建tcp的套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# ...这里是使用套接字的功能(省略)...

# 不用的时候,关闭套接字
s.close()

创建一个udp socket(udp套接字)

import socket

# 创建udp的套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# ...这里是使用套接字的功能(省略)...
 
# 不用的时候,关闭套接字
s.close()

UDP协议

概念

UDP是一种无连接的传输层协议,不提供可靠性,传输量小,传输速度较快。

python udp,python,网络,udp,python,Powered by 金山文档

创建UDP客户端

步骤:

  1. 创建客户端套接字

  1. 发送/接收数据

  1. 关闭套接字

python代码:

import socket


def main():
    #  1.创建udp套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 可选(接收时的端口 ('',端口))
    local_address = ('', 8080)
    udp_socket.bind(local_address)

    while True:
        # 2.发送数据到指定的电脑
        send_data = input('请输入你要发送的数据:')
        udp_socket.sendto(send_data.encode('utf-8'), ('192.168.5.132', 6666))
        if send_data == 'exit':
            break

        # 可选(接收对方发送的数据)
        recv_data = udp_socket.recvfrom(1024)  # 1024表示本次接收的最大字节数
        recv_msg = recv_data[0].decode('utf-8')
        recv_address = recv_data[1]
        print('当前客户端地址:{},当前接受的信息是:{}'.format(recv_address, recv_msg))

    # 3.关闭套接字
    udp_socket.close()


if __name__ == '__main__':
    main()

创建UDP服务端

  1. 创建客户端套接字

  1. 绑定ip和端口

  1. 接收/发送数据

  1. 关闭套接字python代码:

import socket


def main():
    #  1.创建udp套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 2.必须选择接收时的ip和端口 (ip,端口)
    local_address = ('192.168.5.132', 6666)
    udp_socket.bind(local_address)

    while True:
        # 3.接收对方发送的数据
        recv_data = udp_socket.recvfrom(1024)
        recv_msg = recv_data[0].decode('utf-8')
        recv_address = recv_data[1]
        print('当前客户端地址:{},当前接受的信息是:{}'.format(recv_address, recv_msg))

        # 可选(发送数据到指定的电脑)
        send_data = input('请输入你要发送的数据:')
        udp_socket.sendto(send_data.encode('utf-8'), ('192.168.2.4', 8080))
        if send_data == 'exit':
            break
    # 4.关闭套接字
    udp_socket.close()


if __name__ == '__main__':
    main()

实战案例:

如果是两台电脑的话:

客户端(192.168.2.4):

import socket


def main():
    #  1.创建udp套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 可选(接收时的端口 ('',端口))
    local_address = ('', 8080)
    udp_socket.bind(local_address)

    while True:
        # 2.发送数据到指定的电脑
        send_data = input('请输入你要发送的数据:')
        udp_socket.sendto(send_data.encode('utf-8'), ('192.168.5.132', 6666))
        if send_data == 'exit':
            break

        # 可选(接收对方发送的数据)
        recv_data = udp_socket.recvfrom(1024)  # 1024表示本次接收的最大字节数
        recv_msg = recv_data[0].decode('utf-8')
        recv_address = recv_data[1]
        print('当前客户端地址:{},当前接受的信息是:{}'.format(recv_address, recv_msg))

    # 3.关闭套接字
    udp_socket.close()


if __name__ == '__main__':
    main()

服务端(192.168.5.132):

import socket


def main():
    #  1.创建udp套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 2.必须选择接收时的ip和端口 (ip,端口)
    local_address = ('192.168.5.132', 6666)
    udp_socket.bind(local_address)

    while True:
        # 3.接收对方发送的数据
        recv_data = udp_socket.recvfrom(1024)
        recv_msg = recv_data[0].decode('utf-8')
        recv_address = recv_data[1]
        print('当前客户端地址:{},当前接受的信息是:{}'.format(recv_address, recv_msg))

        # 可选(发送数据到指定的电脑)
        send_data = input('请输入你要发送的数据:')
        udp_socket.sendto(send_data.encode('utf-8'), ('192.168.2.4', 8080))
        if send_data == 'exit':
            break
    # 4.关闭套接字
    udp_socket.close()


if __name__ == '__main__':
    main()

效果演示:

python udp,python,网络,udp,python,Powered by 金山文档

客户端(192.168.2.4)

python udp,python,网络,udp,python,Powered by 金山文档

服务端(192.168.5.132)

如果是单台电脑的话:

客户端(192.168.2.4):

import socket


def main():
    #  1.创建udp套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 可选(接收时的端口 ('',端口))
    local_address = ('', 8080)
    udp_socket.bind(local_address)

    while True:
        # 2.发送数据到指定的电脑
        send_data = input('请输入你要发送的数据:')
        udp_socket.sendto(send_data.encode('utf-8'), ('192.168.2.4', 6666))
        if send_data == 'exit':
            break

        # 可选(接收对方发送的数据)
        # recv_data = udp_socket.recvfrom(1024)  # 1024表示本次接收的最大字节数
        # recv_msg = recv_data[0].decode('utf-8')
        # recv_address = recv_data[1]
        # print('当前客户端地址:{},当前接受的信息是:{}'.format(recv_address, recv_msg))

    # 3.关闭套接字
    udp_socket.close()


if __name__ == '__main__':
    main()

服务端(192.168.2.4):

import socket


def main():
    #  1.创建udp套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 2.必须选择接收时的ip和端口 (ip,端口)
    local_address = ('192.168.2.4', 6666)
    udp_socket.bind(local_address)

    while True:
        # 3.接收对方发送的数据
        recv_data = udp_socket.recvfrom(1024)
        recv_msg = recv_data[0].decode('utf-8')
        recv_address = recv_data[1]
        print('当前客户端地址:{},当前接受的信息是:{}'.format(recv_address, recv_msg))

        # 可选(发送数据到指定的电脑)
        # send_data = input('请输入你要发送的数据:')
        # udp_socket.sendto(send_data.encode('utf-8'), ('192.168.2.4', 8080))
        # if send_data == 'exit':
        #     break
    # 4.关闭套接字
    udp_socket.close()


if __name__ == '__main__':
    main()

效果演示:

python udp,python,网络,udp,python,Powered by 金山文档

客户端(192.168.2.4)

python udp,python,网络,udp,python,Powered by 金山文档

服务端(192.168.2.4)

下篇文章我们来一起探讨一下TCP。

(剧透:下篇文章更精彩好玩哦!)文章来源地址https://www.toymoban.com/news/detail-776608.html

到了这里,关于Python网络编程之UDP协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网络编程(TCP与UDP协议)

    Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里,由 JVM 进行控制。并且 Java 实现了一个跨平台的网络库, 程序

    2023年04月27日
    浏览(49)
  • 【QT网络编程】实现UDP协议通信

    Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了 一种无需建立连接就可以发送封装的 IP 数据包的方法 。RFC 768 描述了 UDP。 UDP协议根据消息传送模式可以分为: 单播(Unicast)、组播(Multicast)和广播(

    2024年02月02日
    浏览(52)
  • Netty网络编程(五):使用UDP协议

    今天我将会给大家介绍如何在netty中使用UDP协议。 UDP( User Datagram Protocol ),也叫用户数据报协议。 UDP 的主要功能和亮点并不在于它引入了什么特性,而在于它忽略的那些特性:不保证消息交付,不保证交付顺序,不跟踪连接状态,不需要拥塞控制。 我们来看一下UDP的数据包

    2023年04月27日
    浏览(54)
  • 网络编程-UDP协议(发送数据和接收数据)

    需要了解TCP协议的,可以看往期文章 https://blog.csdn.net/weixin_43860634/article/details/133274701 通过此图,可以了解UDP所在哪一层级中 发送数据 接收数据 运行效果 1、 UDP是面向无连接通信协议 (通俗一点讲,就是不管是否已连接成功,直接发送数据),该特性正好与TCP协议相反,

    2024年02月07日
    浏览(38)
  • Java网络编程 *TCP与UDP协议*

    把分布在 不同地理区域 的具有独立功能的计算机, 通过通信设备与线路 连接起来,由功能完善的软件实现资源共享和信息传递的 系统 简单来说就是把不同地区的计算机通过设备连接起来,实现不同地区之前的数据传输 网络编程 是借助计算机网络,实现我们所写的程序,在不同

    2024年01月16日
    浏览(58)
  • 「网络编程」传输层协议_ UDP协议学习_及原理深入理解

    「前言」文章内容大致是传输层协议,UDP协议讲解。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) HTTP协议普通用户认为是将请求和响应直接发送到了网络当中。但实际应用层需要先将数据交给传输层,由传输层对数据做进一步处理后再将数据继续向下

    2024年02月17日
    浏览(42)
  • 【网络编程】深入了解UDP协议:快速数据传输的利器

    (꒪ꇴ꒪ ),Hello我是 祐言QAQ 我的博客主页:C/C++语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍 快上🚘,一起学习,让我们成为一个强大的攻城狮! 送给自己和读者的一句鸡汤🤔: 集中起来的意志可以击穿顽石! 作者水平很有限,如果发现错误,请在评论区指

    2024年02月09日
    浏览(51)
  • 网络编程——TCP/IP协议族(IP协议、TCP协议和UDP协议……)

    1、IP协议简介 IP协议又称 网际协议 特指为实现在一个相互连接的网络系统上从源地址到目的地传输数据包(互联网数据包)所提供必要功能的协议,是网络层中的协议。 2、特点 不可靠 :它不能保证IP数据包能成功地到达它的目的地,仅提供尽力而为的传输服务 无连接 :IP 并不

    2024年02月13日
    浏览(67)
  • Java网络编程之IP,端口号,通信协议(UDP,TCP)

    ① C/S :客户端/服务器 在用户本地需要下载安装客户端程序,在远程有一个服务器端程序。 优点:画面精美,用户体验好 缺点:用户需要下载更新 ② B/S :浏览器/服务器 只需要一个浏览器,用户通过指定网址访问对应的服务器。 优点:不需要开发客户端,只需要页面+服务

    2024年02月03日
    浏览(78)
  • 【从入门到起飞】JavaSE—网络编程三要素,软件架构,UDP协议

    在网络通信协议下,不同计算机上运行的程序,进行的数据传输 简而言之,就是可以把自己电脑上的资料 通过代码 传到其他人的电脑上 (对画质要求不高时使用) 不需要开发客户端,只需要页面+服务端 用户不需要下载,打开浏览器就能用 如果应用过大,用户体验会受到

    2024年02月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包