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


目录
相关文章
|
3天前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【9月更文挑战第9天】随着互联网的发展,网络编程成为现代软件开发的关键部分。Python凭借简洁、易读及强大的特性,在该领域展现出独特魅力。本文介绍了Python标准库中的`urllib`和第三方库`requests`在处理HTTP请求方面的优势。`urllib`虽API底层但功能全面,适用于深入控制HTTP请求;而`requests`则以简洁的API和人性化设计著称,使HTTP请求变得简单高效。两者互补共存,共同推动Python网络编程进入全新纪元,无论初学者还是资深开发者都能从中受益。
22 7
|
1天前
|
机器学习/深度学习 人工智能 TensorFlow
深入骨髓的解析:Python中神经网络如何学会‘思考’,解锁AI新纪元
【9月更文挑战第11天】随着科技的发展,人工智能(AI)成为推动社会进步的关键力量,而神经网络作为AI的核心,正以其强大的学习和模式识别能力开启AI新纪元。本文将探讨Python中神经网络的工作原理,并通过示例代码展示其“思考”过程。神经网络模仿生物神经系统,通过加权连接传递信息并优化输出。Python凭借其丰富的科学计算库如TensorFlow和PyTorch,成为神经网络研究的首选语言。
7 1
|
2天前
|
API 开发者 Python
揭秘Python网络请求的幕后英雄:requests与urllib的恩怨情仇
【9月更文挑战第10天】在Python的网络请求领域,urllib与requests犹如武林中的两大高手,各自展现了独特的魅力。urllib作为标准库成员,自Python诞生以来便承担着网络请求的任务,以其稳定性和全面性著称。然而,其复杂的API让不少开发者望而却步。
9 2
|
3天前
|
数据采集 JavaScript 前端开发
构建你的首个Python网络爬虫
【9月更文挑战第8天】本文将引导你从零开始,一步步构建属于自己的Python网络爬虫。我们将通过实际的代码示例和详细的步骤解释,让你理解网络爬虫的工作原理,并学会如何使用Python编写简单的网络爬虫。无论你是编程新手还是有一定基础的开发者,这篇文章都将为你打开网络数据获取的新世界。
|
8天前
|
C语言
C语言 网络编程(八)并发的UDP服务端 以进程完成功能
这段代码展示了如何使用多进程处理 UDP 客户端和服务端通信。客户端通过发送登录请求与服务端建立连接,并与服务端新建的子进程进行数据交换。服务端则负责接收请求,验证登录信息,并创建子进程处理客户端的具体请求。子进程会创建一个新的套接字与客户端通信,实现数据收发功能。此方案有效利用了多进程的优势,提高了系统的并发处理能力。
|
8天前
|
C语言
C语言 网络编程(七)UDP通信创建流程
本文档详细介绍了使用 UDP 协议进行通信的过程,包括创建套接字、发送与接收消息等关键步骤。首先,通过 `socket()` 函数创建套接字,并设置相应的参数。接着,使用 `sendto()` 函数向指定地址发送数据。为了绑定地址,需要调用 `bind()` 函数。接收端则通过 `recvfrom()` 函数接收数据并获取发送方的地址信息。文档还提供了完整的代码示例,展示了如何实现 UDP 的发送端和服务端功能。
|
9天前
|
机器学习/深度学习 人工智能 算法
Python中实现简单神经网络
【9月更文挑战第2天】本文将通过Python编程语言,介绍如何从零开始构建一个简单的神经网络。我们将使用纯Python代码,不依赖任何外部库,来展示神经网络的核心概念和工作原理。文章将详细解释每个步骤,并最终实现一个能够进行基本模式识别的神经网络模型。通过这篇文章,读者可以对神经网络有一个直观的理解,并为进一步学习深度学习打下坚实的基础。
|
8天前
|
C语言
C语言 网络编程(九)并发的UDP服务端 以线程完成功能
这是一个基于UDP协议的客户端和服务端程序,其中服务端采用多线程并发处理客户端请求。客户端通过UDP向服务端发送登录请求,并根据登录结果与服务端的新子线程进行后续交互。服务端在主线程中接收客户端请求并创建新线程处理登录验证及后续通信,子线程创建新的套接字并与客户端进行数据交换。该程序展示了如何利用线程和UDP实现简单的并发服务器架构。
|
8天前
|
网络协议 视频直播 C语言
C语言 网络编程(三)UDP 协议
UDP(用户数据报协议)是一种无需建立连接的通信协议,适用于高效率的数据传输,但不保证数据的可靠性。其特点是无连接、尽力交付且面向报文,具备较高的实时性。UDP广泛应用于视频会议、实时多媒体通信、直播及DNS查询等场景,并被许多即时通讯软件和服务(如MSN/QQ/Skype、流媒体、VoIP等)采用进行实时数据传输。UDP报文由首部和数据部分组成,首部包含源端口、目的端口、长度和校验和字段。相比TCP,UDP具有更高的传输效率和更低的资源消耗。
WK
|
10天前
|
数据采集 XML 安全
常用的Python网络爬虫库有哪些?
Python网络爬虫库种类丰富,各具特色。`requests` 和 `urllib` 简化了 HTTP 请求,`urllib3` 提供了线程安全的连接池,`httplib2` 则具备全面的客户端接口。异步库 `aiohttp` 可大幅提升数据抓取效率。
WK
30 1