Socket 编程是网络编程的基础,它允许程序通过网络与其他程序进行通信。在 Python 中,socket 编程非常简单,因为 Python 提供了内置的 socket 库。

基础概念

  • Socket:套接字,是网络通信的基石,它是网络通信中端点之间的抽象表示。
  • TCP/IP:传输控制协议/互联网协议,是互联网的基本通信协议。

创建 Socket

要创建一个 Socket,你需要使用 socket 模块:

import socket

# 创建 TCP/IP Socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

这里,AF_INET 表示 IPv4 地址家族,SOCK_STREAM 表示流式 Socket。

连接到服务器

要连接到一个服务器,你需要调用 connect 方法:

server_address = ('localhost', 10000)
sock.connect(server_address)

这里,localhost 是服务器的 IP 地址,10000 是端口号。

发送数据

要发送数据,你可以使用 send 方法:

message = 'Hello, world!'
sock.sendall(message.encode('utf-8'))

这里,我们发送了一个包含 "Hello, world!" 的消息。

接收数据

要接收数据,你可以使用 recv 方法:

data = sock.recv(1024)
print('Received:', data.decode('utf-8'))

这里,我们接收了服务器发送的 1024 字节的数据。

关闭 Socket

最后,不要忘记关闭 Socket:

sock.close()

例子

下面是一个简单的客户端和服务器的例子:

客户端代码:

import socket

server_address = ('localhost', 10000)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(server_address)
message = 'Hello, world!'
sock.sendall(message.encode('utf-8'))
data = sock.recv(1024)
print('Received:', data.decode('utf-8'))
sock.close()

服务器代码:

import socket

server_address = ('localhost', 10000)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(server_address)
sock.listen(1)

while True:
    connection, client_address = sock.accept()
    try:
        print('Connection from', client_address)
        data = connection.recv(1024)
        print('Received:', data.decode('utf-8'))
        connection.sendall(data)
    finally:
        connection.close()

你可以将客户端代码和服务器的代码分别保存为 client.pyserver.py,然后分别运行它们。客户端会连接到服务器,并发送消息 "Hello, world!",服务器会接收这个消息,并回显给客户端。

更多关于 Python Socket 编程的内容,请查看 Python Socket 编程教程

[

Socket_programming
]