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

pythonserver side programmingprogramming

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()


相关文章