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

Python--网络编程

3. 网络编程与Socket

3.1 Socket基础

创建Socket
import socket# TCP Socket
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# UDP Socket
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
服务器端函数
函数描述
​bind((host, port))​绑定地址和端口
​listen(backlog)​开始监听传入连接
​accept()​接受连接,返回新Socket和客户端地址
客户端函数
函数描述
​connect((host, port))​连接到服务器
​send(data)​发送数据(TCP)
​sendto(data, address)​发送数据(UDP)

3.2 高级Socket功能

超时与异常处理
import sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(5)  # 设置超时为5秒
try:s.connect(("example.com", 80))
except socket.timeout:print("连接超时!")
except socket.error as e:print(f"连接错误: {e}")
finally:s.close()
多线程Socket服务器
import socket
import threadingdef handle_client(conn, addr):print(f"客户端 {addr} 已连接")data = conn.recv(1024)conn.send(b"Server: Received")conn.close()server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("0.0.0.0", 8080))
server.listen(5)while True:conn, addr = server.accept()thread = threading.Thread(target=handle_client, args=(conn, addr))thread.start()
实现简单HTTP请求
# 发送HTTP GET请求
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("example.com", 80))
s.send(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
response = s.recv(4096)
print(response.decode())
s.close()

3.3 TCP通信示例

服务器端:

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("0.0.0.0", 8080))
server_socket.listen(5)
conn, addr = server_socket.accept()
data = conn.recv(1024)
conn.send(b"Received")
conn.close()

客户端:

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("127.0.0.1", 8080))
client_socket.send(b"Hello Server")
response = client_socket.recv(1024)
client_socket.close()

3.4 UDP通信示例

服务器端:

udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind(("0.0.0.0", 9090))
data, addr = udp_socket.recvfrom(1024)
udp_socket.sendto(b"ACK", addr)

客户端:

udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.sendto(b"Hello", ("127.0.0.1", 9090))
response, addr = udp_socket.recvfrom(1024)

3.5 端口扫描与主机探测

使用 python-nmap​ 库进行端口扫描:

import nmapscanner = nmap.PortScanner()
scanner.scan("192.168.1.1", "1-1024", "-sS")  # SYN扫描
print(scanner.all_hosts())
print(scanner["192.168.1.1"].all_tcp())

4. 工具与资源

  • 正则表达式在线测试工具:https://regex101.com

  • 网络调试工具:Wireshark、Postman、tcpdump

  • Python库

    • python-nmap​:pip install python-nmap​

    • requests​:HTTP请求库

    • scapy:构造和解析网络数据包。

      pip install scapy
      
    • asyncio:实现异步网络编程。

      import asyncioasync def tcp_echo_client(message):reader, writer = await asyncio.open_connection("127.0.0.1", 8888)writer.write(message.encode())data = await reader.read(100)print(f"Received: {data.decode()}")writer.close()asyncio.run(tcp_echo_client("Hello Server"))
      

相关文章:

Python--网络编程

3. 网络编程与Socket 3.1 Socket基础 创建Socket import socket# TCP Socket tcp_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# UDP Socket udp_socket socket.socket(socket.AF_INET, socket.SOCK_DGRAM)服务器端函数 函数描述​bind((host, port))​绑定…...

【java】方法的基本内存原理(栈和堆)

java内存主要分为栈和堆,方法相关的部分主要在栈内存里,每个方法调用时会在栈里创建一个栈帧,存放局部变量和方法执行的信息。执行完后栈帧被销毁,局部变量消失。而对象实例存在堆里,由垃圾回收器管理。 **Java方法内…...

SQLMesh 系列教程4- 详解模型特点及模型类型

SQLMesh 作为一款强大的数据建模工具,以其灵活的模型设计和高效的增量处理能力脱颖而出。本文将详细介绍 SQLMesh 模型的特点和类型,帮助读者快速了解其强大功能。我们将深入探讨不同模型类型(如增量模型、全量模型、SCD Type 2 等&#xff0…...

SpringBoot(接受参数相关注解)

文章目录 1.基本介绍2.PathVariable 路径参数获取信息 1.代码实例 1.index.html2.ParameterController.java3.测试 2.细节说明 3.RequestHeader 请求头获取信息 1.代码实例 1.index.html2.ParameterController.java3.测试 2.细节说明 4.RequestParameter 请求获取参数信息 1.…...

hbase合并队列超长问题分析

问题现象 hbase集群合并队列超长,有节点上合并任务已经运行超过1天未结束,合并队列总长不断增加。 问题分析 参数配置: 配置参数默认值含义hbase.hregion.memstore.flush.size128MMemStore达到该值会Flush成StoreFilehbase.hregion.memstore.block.multiplier4当region中…...

FPGA的星辰大海

编者按 时下风头正盛的DeepSeek,正值喜好宏大叙事的米国大统领二次上岗就业,OpenAI、软银、甲骨文等宣布投资高达5000亿美元“星际之门”之际,对比尤为强烈。 某种程度上,,是低成本创新理念的直接落地。 包括来自开源社区的诸多赞誉是,并非体现技术有多“超越”,而是…...

认识vue-admin

认识vue-admin **核心交付:** 为什么要基于现成架子二次开发 什么是二次开发:基于已有的代码(项目工程,脚手架)开进行新功能的开发 所以看懂已有的框架中的既有代码,变得很重要了 1. 背景知识 后台管理系统是一种最…...

STM32、GD32驱动TM1640原理图、源码分享

一、原理图分享 二、源码分享 /************************************************* * copyright: * author:Xupeng * date:2024-07-18 * description: **************************************************/ #include "smg.h"#define DBG_TAG "smg&…...

spring boot 对接aws 的S3 服务,实现上传和查询

1.aws S3介绍 AWS S3(Amazon Simple Storage Service)是亚马逊提供的一种对象存储服务,旨在提供可扩展、高可用性和安全的数据存储解决方案。以下是AWS S3的一些主要特点和功能: 1.1. 对象存储 对象存储模型:S3使用…...

PH热榜 | 2025-02-12

1. FirstHR 2.0 with HR Copilot 标语:小型企业的一站式人力资源平台 介绍:对小型企业来说,FirstHR是一个人力资源平台,专注于招聘和团队发展,并融合了一点人工智能技术。 产品网站: 立即访问 Product …...

通过例子学 rust 个人精简版 1-1

1-1 Hello World fn main() {println!("Hello World!");// 动手试一试println!("Im a Rustacean!"); }Hello World! Im a Rustacean!要点1 :println 自带换行符 注释 fn main() {let x 5 /* 90 */ 5;println!("Is x 10 or 100? x …...

HTTP的前世今生:如何塑造现代互联网的交互方式?

一、关于HTTP 1.1 简介 “没有HTTP协议,就没有今天的互联网。” 从简单的文本传输到支撑全球数十亿设备的实时交互,HTTP协议始终是Web世界的核心纽带。本文将深入剖析其设计思想、演进历程及底层工作原理。 HTTP(HyperText Transfer Protoco…...

Flutter_学习记录_动画的简单了解

用AnimationController简单实现如下的效果图&#xff1a; 1. 只用AnimationController实现简单动画 1.1 完整代码案例 import package:flutter/material.dart;class AnimationDemo extends StatefulWidget {const AnimationDemo({super.key});overrideState<AnimationDe…...

【java】for (int num : numbers) { System.out.print(num + “ “); } for里的是什么意思

for (int num : numbers) 是 Java 中的一种 增强型 for 循环&#xff08;也称为 for-each 循环&#xff09;。它的作用是遍历数组或集合中的每一个元素&#xff0c;并对每个元素执行循环体中的操作。 1. 增强型 for 循环的语法 java Copy for (元素类型 变量名 : 数组或集合…...

内容中台驱动企业CMS架构优化与高效策略

内容概要 在数字化转型浪潮中&#xff0c;企业内容管理系统&#xff08;CMS&#xff09;正面临从单一内容存储向智能化、协同化方向演进的迫切需求。通过引入内容中台架构&#xff0c;企业能够有效整合元数据管理、版本控制与智能协作能力&#xff0c;从而优化传统CMS的底层逻…...

我用 Cursor 开发了一款个人小记系统

https://note.iiter.cn 项目背景 在日常工作和学习中,我们经常需要快速记录一些想法、收藏一些有用的链接或者保存一些重要的文本、图片内容。虽然市面上已经有很多笔记软件,但我想要一个更轻量、更简单的工具,专注于快速记录和智能检索。于是我开发了这款个人小记系统。 系统…...

百问网(100ask)提供的烧写工具的原理和详解;将自己编译生成的u-boot镜像文件烧写到eMMC中

百问网(100ask)提供的烧写工具的原理 具体的实现原理见链接 http://wiki.100ask.org/100ask_imx6ull_tool 为了防止上面这个链接失效&#xff0c;我还对上面这个链接指向的页面保存成了mhtml文件&#xff0c;这个mhtml文件的百度网盘下载链接&#xff1a; https://pan.baidu.c…...

doris:异步物化视图概述

物化视图作为一种高效的解决方案&#xff0c;兼具了视图的灵活性和物理表的高性能优势。 它能够预先计算并存储查询的结果集&#xff0c;从而在查询请求到达时&#xff0c;直接从已存储的物化视图中快速获取结果&#xff0c;避免了重新执行复杂的查询语句所带来的开销。 使用场…...

图像缩放的双线性插值实现方式

1、双线性插值概念 双线性插值是一种用于在二维网格上进行插值的方法&#xff0c;适用于图像处理、计算机图形学等领域。它通过利用四个邻近点的已知值&#xff0c;估算出任意点的值。双线性插值在两个方向&#xff08;通常是水平和垂直&#xff09;上分别进行线性插值&#x…...

深入剖析 Vue 的响应式原理:构建高效 Web 应用的基石

深入剖析 Vue 的响应式原理&#xff1a;构建高效 Web 应用的基石 在前端开发的广阔天地里&#xff0c;Vue.js 凭借其简洁易用的特性和强大的功能&#xff0c;成为众多开发者的心头好。其中&#xff0c;响应式原理作为 Vue 的核心亮点之一&#xff0c;让数据与视图之间实现了高…...

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

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

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...