程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

Python 网络编程大揭秘:Socket 开启互联互通新世界

hfteth 2024-12-26 13:43:13 技术文章 13 ℃

一、Socket 编程基础

Socket 是网络编程中的关键概念,它为不同主机上的进程提供了通信的端点。在 Python 中,socket 模块提供了丰富的功能来实现基于套接字的网络通信。

二、基于 TCP 的网络应用示例

  1. TCP 服务器端
import socket

# 创建一个基于 IPv4 和 TCP 协议的套接字对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定服务器的 IP 地址和端口号
server_address = ('127.0.0.1', 9999)
server_socket.bind(server_address)

# 开始监听客户端连接,最大连接数设置为 5
server_socket.listen(5)
print('服务器已启动,等待客户端连接...')

while True:
    # 接受客户端连接,返回客户端套接字和客户端地址
    client_socket, client_address = server_socket.accept()
    print(f'与客户端 {client_address} 建立连接')

    try:
        # 接收客户端发送的数据,最多接收 1024 字节
        data = client_socket.recv(1024)
        if data:
            print(f'收到客户端消息:{data.decode()}')

            # 向客户端发送响应消息
            response = '消息已收到'.encode()
            client_socket.send(response)
    finally:
        # 关闭与客户端的连接套接字
        client_socket.close()
  1. TCP 客户端
import socket

# 创建一个基于 IPv4 和 TCP 协议的套接字对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器的 IP 地址和端口号
server_address = ('127.0.0.1', 9999)
client_socket.connect(server_address)

# 向服务器发送消息
message = '你好,服务器'.encode()
client_socket.send(message)

# 接收服务器的响应
data = client_socket.recv(1024)
print(f'收到服务器回复:{data.decode()}')

# 关闭客户端套接字
client_socket.close()

三、基于 UDP 的网络应用示例

  1. UDP 服务器端
import socket

# 创建一个基于 IPv4 和 UDP 协议的套接字对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定服务器的 IP 地址和端口号
server_address = ('127.0.0.1', 8888)
server_socket.bind(server_address)

print('UDP 服务器已启动,等待接收数据...')

while True:
    # 接收客户端发送的数据和客户端地址,最多接收 1024 字节
    data, client_address = server_socket.recvfrom(1024)
    if data:
        print(f'收到客户端 {client_address} 消息:{data.decode()}')

        # 向客户端发送响应消息
        response = '数据已收到'.encode()
        server_socket.sendto(response, client_address)
  1. UDP 客户端
import socket

# 创建一个基于 IPv4 和 UDP 协议的套接字对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 服务器的 IP 地址和端口号
server_address = ('127.0.0.1', 8888)

# 向服务器发送消息
message = '你好,UDP 服务器'.encode()
client_socket.sendto(message, server_address)

# 接收服务器的响应和服务器地址
data, server_address = client_socket.recvfrom(1024)
print(f'收到服务器回复:{data.decode()}')

# 关闭客户端套接字
client_socket.close()

在上述代码示例中:

  • 对于 TCP 编程,服务器先创建套接字,绑定地址并监听,然后通过 accept 接受客户端连接,双方可以进行数据的发送和接收,通信结束后关闭连接。
  • 对于 UDP 编程,服务器创建套接字并绑定地址后,通过 recvfrom 接收数据并获取客户端地址,然后可以使用 sendto 向客户端发送响应,无需建立连接的过程。



这些示例展示了使用 Python 的 socket 模块进行基本网络应用开发的过程,你可以根据实际需求进一步扩展和完善这些代码,例如处理多个客户端连接、优化数据传输逻辑等。

Tags:

最近发表
标签列表