从客户端发送和接收消息的 Python 程序


Python socket 是一组用于套接字编程的模块,它使进程能够通过 IP 网络进行通信。Python 中的套接字为大多数网络编程任务提供了基础。通过导入相关的模块,我们可以编写 Python 程序来创建客户端和服务器程序,以用于不同类型的网络应用程序,例如网页抓取、文件传输、电子邮件客户端和聊天应用程序。

"socket" 模块是 Python 中套接字编程最重要的模块。它提供了不同类型的面向连接和无连接套接字,这些套接字实现了特定的协议级别,例如 TCP、UDP 等。

TCP (传输控制协议) 套接字

TCP (传输控制协议) 套接字用于需要可靠数据传输的通信。它们遵循一组特定的数据传输规则,有助于确保成功地将发送的消息传递给目标接收方。这些类型的套接字更适合流媒体服务,例如视频通话、在线游戏、文件共享等。

UDP (用户数据报协议) 套接字

UDP (用户数据报协议) 套接字用于不需要可靠数据传输的通信。这些套接字通过以全速发送数据包来实现快速数据传输,而无需担心接收方是否收到它们。这可以防止数据重传并减少网络拥塞。使用 UDP 套接字的此类应用程序示例包括视频流、VoIP 和在线游戏。

以下是启动服务器和客户端之间通信的步骤。

导入 Socket 模块

首先,我们必须在 Python 环境中导入 socket 模块,如下所示。

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)

侦听连接

套接字方法的 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()

更新时间: 2023年8月2日

浏览量:118

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.