从客户端发送和接收消息的 Python 程序
Python 套接字是一组用于套接字编程的模块,它支持通过 IP 网络在进程之间进行通信。Python 中的套接字为大多数网络编程任务提供了基础。通过导入相关模块,我们可以编写 Python 程序来为不同类型的网络应用程序(如网页抓取、文件传输、电子邮件客户端和聊天应用程序)创建客户端和服务器程序。
"套接字"模块是 Python 中套接字编程最重要的模块。它提供了不同类型的面向连接和无连接套接字,这些套接字实现了特定的协议级别,如 TCP、UDP 等。
TCP(传输控制协议)套接字
TCP(传输控制协议)套接字用于需要可靠传输数据的通信。它们遵循一组特定的数据传输规则,这有助于确保发送的消息被预期的接收者成功接收。这些类型的套接字是流媒体服务(如视频通话、在线游戏、文件共享等)的首选。
UDP(用户数据报协议)套接字
UDP(用户数据报协议)套接字用于不需要可靠数据传输的通信。这些套接字通过全速发送数据包来实现快速数据传输,而无需担心接收方是否收到数据包。这可以防止数据重新传输并减少网络拥塞。使用 UDP 套接字的应用程序示例包括视频流、VoIP 和在线游戏。
以下是启动服务器和客户端之间的通信需要遵循的步骤。
导入套接字模块
首先,我们必须在 Python 环境中导入套接字模块,如下所示。
import socket
创建套接字
现在我们必须使用 socket.socket() 函数和下面提到的代码创建一个套接字。在代码中,第一个参数 socket.AF_INET 指定地址系列 (IPv4),第二个参数 socket.SOCK_STREAM 表示它是一个 TCP 套接字。我们还可以将 socket.SOCK_DGRAM 用于 UDP 套接字。
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
绑定套接字
在此步骤中,我们指定套接字将侦听传入连接的地址和端口。例如,如果套接字绑定到本地主机地址("localhost")和端口 5000,则代码将如下所示。
server_address = ('localhost', 5000) sock.bind(server_address)
监听连接
socket 方法的 listen() 函数将套接字设置为监听模式,允许其接受传入的连接,并且我们为 listen() 函数分配参数 1,指定可以排队等待接受的最大待处理连接数。
sock.listen(1)
接受连接
accept() 函数会阻塞,直到客户端连接到套接字。它返回一个表示连接和客户端地址的新套接字对象。然后,我们可以在单独的线程或进程中处理连接。
while True: connection, client_address = sock.accept()
发送和接收数据
建立连接后,我们可以使用套接字对象发送和接收数据。recv() 函数从套接字读取数据,sendall()函数将数据发送到客户端。数据通常以字节为单位传输,因此通常在字符串前面加上 b 来表示 字节文字。
data = connection.recv(1024) connection.sendall(b'Hello, client!')
关闭连接
与客户端通信结束后,可以通过调用套接字对象上的 close() 方法来关闭连接。
connection.close()
关闭服务器套接字
最后,当您不再需要服务器套接字时,可以使用 close() 方法将其关闭。
sock.close()
示例
以下是完整示例 –
import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_address = ('localhost', 5000) sock.bind(server_address) sock.listen(1) while True: connection, client_address = sock.accept() data = connection.recv(1024) connection.sendall(b'Hello, client!') connection.close() sock.close()