当前位置: 首页 > 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 socket

s = 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 threading

def 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 nmap

scanner = 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 asyncio
      
      async 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"))
      

相关文章:

  • 【C++前缀和】1906. 查询差绝对值的最小值|2146
  • DeepSeek-R1-Distill-Qwen-1.5B模型的深度解析
  • Vue.js 组件 - 自定义事件
  • 当通用智能遇到深度推理:如何正确驾驭DeepSeek-V3与R1?
  • 解决Windows11复制文件到桌面会跑左上角第2个位置导致桌面图标位置错乱问题
  • 算法11-分治算法
  • C++字符串处理指南:从基础操作到性能优化——基于std::string的全面解析
  • 数据结构与算法之排序算法-归并排序
  • 节目选择器安卓软件编写(针对老年人)
  • 面试完整回答:SQL 分页查询中 limit 500000,10和 limit 10 速度一样快吗?
  • 生成式人工智能:技术革命与应用图景
  • 理解WebGPU 中的 GPUAdapter :连接浏览器与 GPU 的桥梁
  • 数学建模基础训练-1:概念解析
  • AUTOSAR MCAL层ETH模块(1)——通信原理
  • 【VSCode】一键清理旧版本插件脚本(Mac或者Windows都可)
  • 算法19(力扣244)反转字符串
  • opencascade 获取edge起始点 会出现终点与实际不同的情况
  • Java 大视界 -- 绿色大数据:Java 技术在节能减排中的应用与实践(90)
  • @[TOC](优先级队列(堆)) 【本节目标】 1. 掌握堆的概念及实现 2. 掌握 PriorityQueue 的使用 # 1. 优先级队列
  • 蓝桥杯试题:计数问题
  • 上海率先推进生物制品分段生产试点,这款国产1类创新药获批上市
  • 秦洪看盘|缩量回踩,积蓄叩关能量
  • 外交部:国际社会广泛理解和支持中方不同意台参加世卫大会的决定
  • 全国人大常委会今年将初次审议检察公益诉讼法
  • 中国至越南河内国际道路运输线路正式开通
  • 观察|“双雄”格局下电池制造商如何生存:加码不同技术、抢滩新赛道