从客户端发送和接收消息的 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()
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP