Python 套接字编程

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,我们将探索 Python 中的套接字编程世界,场景设定在一个充满活力的狂欢节的奇妙情境中,并以一位奇幻气球艺术家的异想天开的角色为特色。狂欢节热闹非凡,充满兴奋和活力,而奇幻气球艺术家则以其壮观的作品吸引着观众。本实验的目标是深入套接字编程领域,编织我们自己神奇的网络连接,就像狂欢节上令人着迷的气球作品一样。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/NetworkingGroup(["Networking"]) python/NetworkingGroup -.-> python/socket_programming("Socket Programming") subgraph Lab Skills python/socket_programming -.-> lab-271592{{"Python 套接字编程"}} end

建立基本的客户端 - 服务器通信

在这一步中,我们将使用 Python 套接字编程创建一个简单的客户端 - 服务器连接。客户端和服务器将在基本交互中进行通信和交换数据。

  1. 在目录 ~/project 中打开一个名为 server.py 的新 Python 文件。
  2. server.py 中实现服务器端代码。
## server.py
import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 8888))
server_socket.listen(1)

connection, address = server_socket.accept()
with connection:
    print('Connected by', address)
    while True:
        data = connection.recv(1024)
        if not data:
            break
        connection.sendall(data)
  1. 在目录 ~/project 中打开另一个名为 client.py 的 Python 文件。
  2. client.py 中实现客户端代码。
## client.py
import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('127.0.0.1', 8888))
client_socket.sendall(b'Hello, server')
data = client_socket.recv(1024)
print('Received', repr(data))

同时运行这两个文件,并点击“拆分终端”来实现。终端上应显示以下信息:

labex:project/ $ python server.py
Connected by ('127.0.0.1', 40082)
labex:project/ $ python client.py
Received b'Hello, server'

增强通信中的数据序列化

在这一步中,我们将通过对数据进行序列化和反序列化来增强客户端与服务器之间的通信。

  1. 修改 server.py 代码以包含数据序列化和反序列化。
## server.py
import socket
import pickle

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 8888))
server_socket.listen(1)

connection, address = server_socket.accept()
with connection:
    print('Connected by', address)
    while True:
        data = connection.recv(1024)
        if not data:
            break
        deserialized_data = pickle.loads(data)
        processed_data = deserialized_data.upper()
        connection.sendall(processed_data.encode())
  1. 修改 client.py 代码以包含数据序列化和反序列化。
## client.py
import socket
import pickle

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('127.0.0.1', 8888))
data_to_send = pickle.dumps('Hello, server')
client_socket.sendall(data_to_send)
received_data = client_socket.recv(1024)
print('Received', received_data.decode())

同时运行这两个文件,并点击“拆分终端”来实现。终端上应显示以下信息:

labex:project/ $ python server.py
Connected by ('127.0.0.1', 40082)
labex:project/ $ python client.py
Received HELLO, SERVER

总结

在本实验中,我们深入探索了 Python 套接字编程的迷人领域,从神奇的狂欢节氛围和奇幻气球艺术家的作品中汲取灵感。通过引导你完成创建客户端 - 服务器连接、通过数据序列化增强通信等步骤,我们旨在提供一次身临其境且富有教育意义的体验,使你能够掌握套接字编程的技巧,并享受它们所能编织的奇妙连接。