Python网络编程:套接字创建与协议详解

一颗松果
一颗松果
发布时间:2026-10-16| 4人浏览过
原创

本文详细介绍Python中套接字(Socket)的创建方法,涵盖TCP与UDP协议的区别、常用地址族(如AF_INET)以及端口配置。通过具体代码示例,演示如何利用socket模块建立连接、发送请求及处理数据,帮助开发者掌握网络通信基础。

1、网络协议

TCP/IP 是设备在 Internet 及大多数本地网络中进行通信的标准协议集合。TCP 协议具备高度的可靠性,包含大量的错误检查机制,但因此消耗更多系统资源,常被 HTTP、SMTP 或 FTP 等服务采用。相比之下,UDP 协议的可靠性较低,错误检查能力有限,但资源占用更少,适用于 VoIP 等对实时性要求较高的服务。

在 Python 中,创建套接字时需指定协议类型:使用 socket.SOCK_STREAM 可创建基于 TCP 的套接字,而使用 socket.SOCK_DGRAM 则用于创建基于 UDP 的套接字。

2、地址族

在创建套接字实例时,必须明确指定其地址族(Address Family),该参数决定了套接字使用的通信类型。

AF_UNIX 或 AF_LOCAL:用于本地进程间通信。

AF_INET:用于 IPv4 Internet 协议。

AF_INET6:用于 IPv6 Internet 协议。

AF_IPX:用于 IPX-Novell 协议(较旧的网络协议)。

AF_BLUETOOTH:用于无线蓝牙通信协议。

AF_PACKET:用于底层数据包接口,通常用于网络嗅探或自定义协议实现。

对于最常用的 AF_INET 地址族,需要指定一个包含主机和端口的元组。其中,host 是一个字符串,可以表示互联网域名(例如 example.com)或 IPv4 地址(例如 93.184.216.34);port 则是一个整数,表示目标服务的端口号。

3、通过域名获取IP地址

import socket
ip = socket.gethostbyname("geek-docs.com")
print(ip)

4、socket

TCP ipv4
import socket
# 创建用于IPV4的TCP套接字
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    # 工作时间服务器的主机名和端口
    host = "time.nist.gov"
    port = 13
    # 连接到远程套接字
    s.connect((host, port))
    # 将数据发送到套接字。套接字必须连接到远程套接字。从字节发送数据,直到发送完所有数据或发生错误为止
    s.sendall(b'')
    print(str(s.recv(4096), 'utf-8'))
# HEAD请求:HEAD 请求是没有消息正文的 GET 请求。 请求/响应的标头包含元数据,例如 HTTP 协议版本或内容类型。
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect(("webcode.me", 80))
    s.sendall(b"HEAD / HTTP/1.1\r\nHost: webcode.me\r\nAccept: text/html\r\n\r\n")
    print(str(s.recv(1024), 'utf-8'))
#GET 请求:请求指定资源的表示形式。 使用 GET 的请求应仅检索数据
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect(("webcode.me", 80))
    # 对于 HTTP 1.1 协议,默认情况下,连接可以是持久的。 这就是为什么我们发送Connection: close标头的原因。
    s.sendall(b"GET / HTTP/1.1\r\nHost: webcode.me\r\nAccept: text/html\r\nConnection: close\r\n\r\n")
    while True:
        data = s.recv(1024)
        if not data:
            break
        print(data.decode())
#回显客户端服务器示例
import socket
import time
with socket.socket() as s:
    host = 'localhost'
    port = 8001
    s.bind((host, port))
    print(f'socket binded to {port}')
    s.listen()
    con, addr = s.accept()
    with con:
        while True:
            data = con.recv(1024)
            if not data:
                break
            con.sendall(data)
#异步服务器
import asyncio
async def handle_client(reader, writer):
    data = (await reader.read(1024))
    writer.write(data)
    writer.close()
loop = asyncio.get_event_loop()
loop.create_task(asyncio.start_server(handle_client, 'localhost', 8001))
loop.run_forever()

以上即为 Python 中创建套接字的详细步骤与原理。如需了解更多关于 Python 网络编程的内容,建议关注本站发布的其他相关文章。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。