当前位置: 首页 > news >正文

【30天玩转python】网络编程基础

网络编程基础

网络编程是指编写能够在网络上进行通信的程序,通过网络进行数据的发送与接收。Python 提供了许多库和工具来进行网络编程,如 socketurllibrequests。在这篇文章中,我们将介绍网络编程的基础知识,并演示如何使用 Python 实现简单的网络通信。


1. 网络基础知识

1.1 IP地址

IP地址是用于唯一标识网络设备的数字地址。它分为 IPv4 和 IPv6 两个版本,IPv4 是 32 位地址,而 IPv6 是 128 位地址。常见的 IPv4 地址格式如:192.168.1.1

1.2 端口

端口是操作系统用来区分不同网络服务的标识符。一个 IP 地址可以有多个端口,常见的端口号如 HTTP 的 80 端口和 HTTPS 的 443 端口。

1.3 TCP 和 UDP
  • TCP(Transmission Control Protocol):一种面向连接的、可靠的传输协议,在通信前需要建立连接,确保数据的完整性和顺序性。
  • UDP(User Datagram Protocol):一种无连接、不可靠的传输协议,发送数据时无需建立连接,速度较快但不保证数据到达顺序和完整性。

2. 使用 socket 进行网络编程

socket 是 Python 提供的底层网络编程接口,用于创建网络连接和传输数据。socket 支持 TCP 和 UDP 两种协议。

2.1 使用 TCP 进行网络通信

TCP 是一种可靠的、面向连接的协议,常用于需要保证数据顺序和完整性的应用场景。

示例:TCP 客户端

import socket# 创建TCP客户端
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接服务器
client.connect(('127.0.0.1', 8080))# 发送数据
client.sendall(b'Hello, Server!')# 接收数据
data = client.recv(1024)print(f"Received from server: {data.decode()}")# 关闭连接
client.close()

示例:TCP 服务器

import socket# 创建TCP服务器
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定IP和端口
server.bind(('127.0.0.1', 8080))# 监听连接
server.listen(5)
print("Server listening on port 8080...")while True:# 接受客户端连接client_socket, client_address = server.accept()print(f"Connection from {client_address}")# 接收数据data = client_socket.recv(1024)print(f"Received: {data.decode()}")# 发送回复client_socket.sendall(b'Hello, Client!')# 关闭客户端连接client_socket.close()

在这个例子中,TCP 客户端和服务器通过 socket 进行通信。服务器使用 bind()listen() 函数来等待客户端连接,并在收到消息后进行回复。

2.2 使用 UDP 进行网络通信

UDP 是一种无连接协议,不保证消息的到达顺序和可靠性,但发送数据速度较快,适用于对实时性要求高的场景,如视频流传输。

示例:UDP 客户端

import socket# 创建UDP客户端
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 发送数据
client.sendto(b'Hello, UDP Server!', ('127.0.0.1', 8080))# 接收数据
data, addr = client.recvfrom(1024)print(f"Received from server: {data.decode()}")# 关闭连接
client.close()

示例:UDP 服务器

import socket# 创建UDP服务器
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定IP和端口
server.bind(('127.0.0.1', 8080))
print("UDP server is waiting for messages...")while True:# 接收数据data, client_address = server.recvfrom(1024)print(f"Received from {client_address}: {data.decode()}")# 发送回复server.sendto(b'Hello, UDP Client!', client_address)

在这个例子中,UDP 客户端和服务器无需建立连接即可发送和接收数据,通信流程简单但不保证数据的到达。


3. 使用 urllib 进行 HTTP 请求

urllib 是 Python 自带的 HTTP 请求库,用于与 Web 服务器进行交互。它支持发送 HTTP 请求并处理响应数据。

3.1 发送 HTTP GET 请求

GET 请求用于从服务器获取数据。

import urllib.requesturl = 'http://www.example.com'
response = urllib.request.urlopen(url)# 读取响应数据
data = response.read()print(data.decode('utf-8'))
3.2 发送 HTTP POST 请求

POST 请求用于向服务器提交数据。

import urllib.request
import urllib.parseurl = 'http://www.example.com/login'
data = urllib.parse.urlencode({'username': 'user', 'password': 'pass'}).encode('utf-8')# 发送POST请求
request = urllib.request.Request(url, data=data)
response = urllib.request.urlopen(request)# 读取响应数据
print(response.read().decode('utf-8'))

4. 使用 requests 进行 HTTP 请求

requests 是一个功能强大且易于使用的第三方 HTTP 请求库,它比 urllib 提供了更简洁的 API。

4.1 安装 requests

首先,使用 pip 安装 requests

pip install requests
4.2 发送 HTTP GET 请求
import requestsresponse = requests.get('http://www.example.com')# 读取响应内容
print(response.text)
4.3 发送 HTTP POST 请求
import requestspayload = {'username': 'user', 'password': 'pass'}
response = requests.post('http://www.example.com/login', data=payload)# 读取响应内容
print(response.text)

5. 网络编程中的常见问题

5.1 超时问题

网络通信可能会由于网络问题或服务器响应缓慢而导致超时。可以通过设置超时参数来避免程序长时间等待。

import requeststry:response = requests.get('http://www.example.com', timeout=5)print(response.text)
except requests.Timeout:print("Request timed out")
5.2 异常处理

网络通信时可能会出现各种错误,如连接失败、数据传输中断等。在编写网络程序时,必须捕获并处理这些异常。

import sockettry:client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)client.connect(('127.0.0.1', 8080))
except socket.error as e:print(f"Socket error: {e}")

6. 小结

  • TCP 和 UDP 是网络编程的两种常用协议。TCP 保证数据的可靠性和顺序性,适用于大多数网络应用;UDP 速度快但不保证数据的可靠性,适用于实时应用。
  • Python 提供了 socket 模块来实现底层网络编程,支持 TCP 和 UDP 的网络通信。
  • 对于 HTTP 请求,可以使用 Python 内置的 urllib 或第三方库 requests,其中 requests 提供了更加友好的接口。
  • 在实际开发过程中,网络程序需要考虑异常处理和超时问题,以保证程序的健壮性和稳定性。

通过掌握这些网络编程的基础知识,你可以开始编写简单的网络应用程序,处理客户端与服务器之间的通信。在此基础上,你还可以进一步学习高级的网络编程技术,如异步编程和高并发处理。

相关文章:

【30天玩转python】网络编程基础

网络编程基础 网络编程是指编写能够在网络上进行通信的程序,通过网络进行数据的发送与接收。Python 提供了许多库和工具来进行网络编程,如 socket、urllib 和 requests。在这篇文章中,我们将介绍网络编程的基础知识,并演示如何使…...

【PCB工艺】如何实现PCB板层间的互连

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言①、什么是通孔②、通孔是怎样产生的③、通孔种类④、盘中孔⑤、设计建议 前言 送给大学毕业后找不到奋斗方向的你…...

FastAPI--如何自定义Docs UI,包括多个APP、静态资源、元数据等

如何mount 一个FastAPI Application? “Mounting” means adding a completely “independent” application in a specific path, that then takes care of handling everything under that path, with the path operations declared in that sub-application. 示例代码 主…...

【FPGA XDMA AXI Bridge 模式】PCIe:BARs 和 AXI:BARs 含义解析

一. XDMA IP核两种模式 Xilinx的 DMA/Bridge Subsystem for PCI Express IP核中,支持普通的XDMA模式,但是这种模式只允许主机端发起PCIe 读写请求,FPGA内部无法主动发起读写请求,也即FPGA无法主动读写HOST的内存。 而该IP核的另…...

嵌入式-QT学习-小练习

1. 实现多窗口 2. 给按键增加图标 3. 动图展示 结果演示&#xff1a; Mul_Con main.cpp #include "widget.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }一、第一个窗口展示 …...

使用 Flask-Limiter 和 Nginx 实现接口访问次数限制

在现代 Web 应用中&#xff0c;针对敏感接口&#xff08;如短信验证码、登录接口等&#xff09;的访问次数限制至关重要。通过设置合理的限流策略&#xff0c;可以有效防止接口滥用&#xff0c;避免过多的资源消耗&#xff0c;并提升安全性。本文将通过 Nginx 和 Flask-Limiter…...

【数据结构】排序算法---冒泡排序

文章目录 1. 定义2. 算法步骤3. 动图演示4. 性质5. 算法分析6. 代码实现C语言PythonJavaCGo 结语 1. 定义 冒泡排序&#xff08;英语&#xff1a;Bubble sort&#xff09;是一种简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的…...

mysql数据库中事务锁的机制

读锁又称为共享锁&#xff0c;简称S锁&#xff0c;共享锁就是多个事务对于同一数据可以共享一把锁&#xff0c;都能访问到数据&#xff0c;但是只能读不能修改。 写锁又称为排他锁&#xff0c;简称X锁&#xff0c;排他锁就是不能与其他所并存&#xff0c;如一个事务获取了一个…...

并发工具类-CountDownLatch

CountDownLatch 是 Java 中提供的一种非常有用的并发工具类&#xff0c;位于 java.util.concurrent 包中。它可以使一个或多个线程等待其他线程完成一组特定的操作后再继续执行。CountDownLatch 通过维护一个计数器来实现这一点&#xff0c;计数器的初始值由构造函数设定。每当…...

进程的重要函数

进程的重要函数: fork函数 了解fork函数 通过调用fork()函数&#xff0c;则会产生一个新的进程。调用fork()函数的进程叫做 父进程&#xff0c;产生的新进程则为子进程。 其编码过程: 1.函数功能: 函数头文件 #include <sys/types.h> #include <unistd.h> 函数…...

python 实现average median平均中位数算法

average median平均中位数算法介绍 平均&#xff08;Mean&#xff09;和中位数&#xff08;Median&#xff09;是统计学中常用的两个概念&#xff0c;用于描述一组数据的中心趋势&#xff0c;但它们并不是算法&#xff0c;而是数据处理的结果。不过&#xff0c;我可以解释如何…...

HTML概述

1. HTML概述 1.1 HTML定义 HTML超文本标记语言&#xff0c;其中超文本是链接&#xff0c;标记也叫标签&#xff08;即带尖括号的文本&#xff09;。 1.2 HTML基本骨架 HTML基本骨架是网页模板。 <html><head><title>网页的标题</title></head&…...

【FFT】信号处理——快速傅里叶变换【通俗易懂】

快速傅里叶变换&#xff08;Fast Fourier Transform, FFT&#xff09;是一种用于将信号从时间域转换到频率域的算法。 傅里叶变换的核心思想是&#xff1a;任何周期性信号都可以分解成多个不同频率的正弦波或余弦波的叠加。 简单来说&#xff0c;FFT可以帮助我们理解一个信号…...

电脑升级WIN11之后需要注意哪些东西

1.记事本&#xff0c;在前单位时&#xff0c;电脑升级后&#xff0c;记事本会需要手动更新&#xff0c;或手动安装 2.任务栏&#xff0c;WIN11默认任务栏在中间位置&#xff0c;想要调成WIN10一样的位置&#xff0c;分享两个方法 拖拽法&#xff08;适用于Windows 11 2022年1…...

GEE 教程:利用sentinel-5p数据进行长时序CO一氧化碳的监测分析并结合夜间灯光数据分析

目录 简介 数据 哨兵5号 NOAA/VIIRS/DNB/MONTHLY_V1/VCMCF 函数 ui.Chart.image.series(imageCollection, region, reducer, scale, xProperty) Arguments: Returns: ui.Chart 代码 结果 简介 利用sentinel-5p数据进行长时序CO一氧化碳的监测分析并结合夜间灯光数据…...

【教程】鸿蒙ARKTS 打造数据驾驶舱---前序

鸿蒙ARKTS 打造数据驾驶舱 ​ 前面2章我介绍了如何通过定义View绘制箭头以及圆形进度&#xff0c;初步了解了鸿蒙如何进行自定义View。接下来我将通过我最近在带的一个VUE的项目&#xff0c;简单实现了几个鸿蒙原生页面。帮助大家快速上手纯血鸿蒙开发. 本项目基于Api11Stage模…...

Html css样式总结

1.Html css样式总结 CSS 定义 中文名称&#xff1a;层叠样式表 。 英文全称&#xff1a;Cascading Style Sheets &#xff0c;简称CSS。在网页制作时采用CSS技术&#xff0c;可以有效地对页面的布局、字体、颜色、背景和其它效果实现更加精确的控制。 &#xff08;1&#xff09…...

决策树基础概论

1. 概述 在机器学习领域&#xff0c;决策树&#xff08;Decision Tree&#xff09; 是一种高度直观且广泛应用的算法。它通过一系列简单的是/否问题&#xff0c;将复杂的决策过程分解为一棵树状结构&#xff0c;使得分类或回归问题的解决过程直观明了。决策树的最大特点在于可…...

Spring Boot集成Akka Cluster快速入门Demo

1.什么是Akka Cluster&#xff1f; Akka Cluster将多个JVM连接整合在一起&#xff0c;实现消息地址的透明化和统一化使用管理&#xff0c;集成一体化的消息驱动系统。最终目的是将一个大型程序分割成若干子程序&#xff0c;部署到很多JVM上去实现程序的分布式并行运算&#xf…...

django学习入门系列之第十点《A 案例: 员工管理系统10》

文章目录 12 管理员操作12.4 密码加密12.5 获取对象&#xff08;防止id错误--编辑界面等&#xff09;12.6 编辑管理员12.7 重置密码 往期回顾 12 管理员操作 12.4 密码加密 密码不应该以明文的方式直接存储到数据库&#xff0c;应该加密才放进去 定义一个md5的方法&#xff…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...