Python网络编程 —— IP、UDP

简介: Python网络编程 —— IP、UDPIPip地址: 在网络中标识一台唯一的设备ip地址的作用: 通过ip地址在网络中找到对应的设备,然后可以给这个设备发送数据ip地址分为:ipv4 ipv6域名:方便记忆某台电脑的主机地址,域名能解析出来一个ip地址(DNS解析)ping 127.

Python网络编程 —— IP、UDP

IP

ip地址: 在网络中标识一台唯一的设备

ip地址的作用: 通过ip地址在网络中找到对应的设备,然后可以给这个设备发送数据

ip地址分为:ipv4 ipv6

域名:方便记忆某台电脑的主机地址,域名能解析出来一个ip地址(DNS解析)

ping 127.0.0.1 能ping通即代表电脑网卡没有问题,网络正常就能上网

网络通信流程:
通过ip地址找到对应的设备(电脑,手机等),然后通过端口号找到端口,再通过端口给应用程序发送数据

端口号分为知名端口号和动态端口号(知名端口号是系统使用的,动态端口号是程序员设置使用的)

知名端口号:范围从0-1023

动态端口范围:1024-65535 ,当程序关闭时,同时也就释放了所占用的端口号

查看端口号:netstat -an

查看端口号被哪个程序占用: lsof -i[tcp/udp]:端口号 (找不到时,使用管理员权限,加sudo)

根据进程编号杀死指定进程:kill -9 进程号

UDP

概念:英文全拼(User Datagram Protocol)简称用户数据报协议,它是无连接的、不可靠的网络传输协议

面向无连接型:无需确认对端是否存在,发送端可随时发送数据(udp网络传输协议好比现实生活中写信)

UDP特点:

无连接、资源开销小、传输速度快、UDP每个数据包最大是64K

UDP优点:

传输速度快

不需要连接,资源开销小

UDP缺点:

传输数据不可靠,容易丢失数据包

没有流量控制,当对方没有及时接收数据,发送方一直发送数据会导致缓冲区数据满了,电脑出现卡死情况,所以接收方需要及时接收数据

socket

进程:运行的程序或者软件称之为进程

进程通信:运行的程序之间的数据共享

socket:简称:套接字,是进程间通信的一个工具,它能实现把数据从一方传输到另外一方,完成不同电脑上进程之间的通信

使用场景:只要和网络相关,几乎都需要使用socket

UDP网络程序

UDP网络程序流程

1.创建socket套接字

2.发送/接收数据

3.关闭套接字

创建socket 发送数据

在Python中使用socket模块的函数socket

import socket

# 判断是否是主模块,判断是否是程序入口
if __name__ == "__main__":
    # 创建UDP套接字
    # 1. ip地址的类型:AF_INET: ipv4, AF_INET6: ipv6
    # 2. 传输协议类型:SOCK_DGRAM:udp协议
    udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

    # 准备数据
    send_content = "学习socket,很开心"

    # 把字符串编码成为二进制数据
    send_data = send_content.encode("utf-8")

    # 发送数据
    udp_socket.sendto(send_data,('192.168.138.50',8080))

    # 关闭套接字
    udp_socket.close()

创建socket 接收数据
import socket
if __name__ == "__main__":
    # 创建udp套接字
    udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

    # 准备发送的数据
    send_content = "测试测试"

    # 对数据进行编码,把字符串转成对应的二进制数据
    send_data = send_content.encode("gbk")

    # 发送数据
    udp_socket.sendto(sned_data,("192.168.138.50", 8080))

    # 接受数据,1024表示:每次接收数据的最大字节数
    recv_data, ip_port = udp_socket.recvfrom(1024)
    

    # 对二进制数据进行解码
    # sep : 指定数据的分隔符
    recv_content = recv_data.decode("gbk")
    print(recv_content, ip_port, sep="&")

    # 关闭
    udp_socket.close()
udp绑定端口号

udp 绑定信息:一般情况下,在一台电脑上运行的网络程序有很多,为了不与其他的网络程序占用同一个端口号,往往在编程中,udp的端口号一般不绑定

但是如果需要做成一个服务端的程序的话,是需要绑定的

绑定端口号:

import socket


if __name__ == "__main__":
    # 创建udp套接字
    udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

    # 绑定端口号, "" : 表示本机的任意IP地址,可以解决电脑上多个网卡都能收到数据
    udp_socket.bind("", 9090)

    # 发送数据
    udp_socket.sendto("哈哈".encode("gbk"),("192.168.138.50", 8080))

    # 接收数据
    recv_data, ip_port = udp_socket.recvfrom(1024)

    # 把二进制数据进行解码
    recv_content = recv_data.decode("gbk")
    print(recv_content, ip_port)
    
    # 关闭套接字
    udp_socket.close()
UDP 发送广播消息
import socket


if __name__ == "__main__":
    # 创建udp套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    # 1.SQL_SOCKET:当前套接字
    # 2.SO_BROADCAST :广播选项
    # 3.True :是否开启广播选项
    udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True)
    # 发送数据
    udp_socket.sendto("你好".encode("gbk"), ("192.168.138.50", 8989))

    # 关闭套接字
udp 聊天器

需求:

在一个电脑中编写一个程序,有两个功能

1.获取键盘数据,并将其发送给对方

2.接受数据并显示

import socket


if __name__ == "__main__":
    # 创建udp套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 接收用户的功能选项
    menu_option = input("请输入功能选项 1.发送数据 2.接收数据 3.退出:")

    while True:
        if menu_option == "1":

            # 获取用户发送的数据
            send_content = input("请求输入您要发送的数据:")
            
            # 获取对方的IP地址
            dest_ip = input("请输入对方的ip地址:")
            
            # 获取对方的端口号
            dest_port = input("请输入对方的端口号:")
            
            # 把字符串进行gbk编码
            send_data = send_content.encode("gbk")

            # 发送数据
            udp_socket.sendto(send_data,(dest_ip,int(dest_port)))

        elif menu_option == "2":

            # 接收数据
            recv_data, ip_port = udp_socket.recvfrom(1024)

            # 对二进制数据进行解码
            recv_content = recv_data.decode("gbk")
            print(recv_content, ip_port)

        elif menu_option == "3":
            break

        else:
            print("请按提示操作!")

    # 关闭套接字
    udp_socket.close()

欢迎访问

个人博客地址:www.limiao.tech


目录
相关文章
|
调度 Python
探索Python高级并发与网络编程技术。
可以看出,Python的高级并发和网络编程极具挑战,却也饱含乐趣。探索这些技术,你将会发现:它们好比是Python世界的海洋,有穿越风暴的波涛,也有寂静深海的奇妙。开始旅途,探索无尽可能吧!
347 15
|
数据采集 机器学习/深度学习 Web App开发
Python爬虫如何应对贝壳网的IP封禁与人机验证?
Python爬虫如何应对贝壳网的IP封禁与人机验证?
|
数据采集 机器学习/深度学习 边缘计算
Python爬虫动态IP代理报错全解析:从问题定位到实战优化
本文详解爬虫代理设置常见报错场景及解决方案,涵盖IP失效、403封禁、性能瓶颈等问题,提供动态IP代理的12种核心处理方案及完整代码实现,助力提升爬虫系统稳定性。
623 0
|
机器学习/深度学习 API Python
Python 高级编程与实战:深入理解网络编程与异步IO
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧、数据科学、机器学习、Web 开发和 API 设计。本文将深入探讨 Python 在网络编程和异步IO中的应用,并通过实战项目帮助你掌握这些技术。
|
网络协议 算法 安全
Go语言的网络编程与TCP_UDP
Go语言由Google开发,旨在简单、高效和可扩展。本文深入探讨Go语言的网络编程,涵盖TCP/UDP的基本概念、核心算法(如滑动窗口、流量控制等)、最佳实践及应用场景。通过代码示例展示了TCP和UDP的实现,并讨论了其在HTTP、DNS等协议中的应用。最后,总结了Go语言网络编程的未来发展趋势与挑战,推荐了相关工具和资源。
495 5
|
网络安全 Python
Python网络编程小示例:生成CIDR表示的IP地址范围
本文介绍了如何使用Python生成CIDR表示的IP地址范围,通过解析CIDR字符串,将其转换为二进制形式,应用子网掩码,最终生成该CIDR块内所有可用的IP地址列表。示例代码利用了Python的`ipaddress`模块,展示了从指定CIDR表达式中提取所有IP地址的过程。
852 6
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
1046 3
|
Web App开发 缓存 网络协议
不为人知的网络编程(十八):UDP比TCP高效?还真不一定!
熟悉网络编程的(尤其搞实时音视频聊天技术的)同学们都有个约定俗成的主观论调,一提起UDP和TCP,马上想到的是UDP没有TCP可靠,但UDP肯定比TCP高效。说到UDP比TCP高效,理由是什么呢?事实真是这样吗?跟着本文咱们一探究竟!
1062 10
|
网络协议 物联网 API
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第26天】Python 是一门功能强大且易于学习的编程语言,Twisted 框架以其事件驱动和异步IO处理能力,在网络编程领域独树一帜。本文深入探讨 Twisted 的异步IO机制,并通过实战示例展示其强大功能。示例包括创建简单HTTP服务器,展示如何高效处理大量并发连接。
396 1
|
Kubernetes 网络协议 Python
Python网络编程:从Socket到Web应用
在信息时代,网络编程是软件开发的重要组成部分。Python作为多用途编程语言,提供了从Socket编程到Web应用开发的强大支持。本文将从基础的Socket编程入手,逐步深入到复杂的Web应用开发,涵盖Flask、Django等框架的应用,以及异步Web编程和微服务架构。通过本文,读者将全面了解Python在网络编程领域的应用。
394 1

推荐镜像

更多