在本教程中,您将学习如何使用 Python 套接字编程和 Socket API 在客户端和服务器之间交换数据。 稍后,本教程将讨论如何使用托管提供程序在两个或多个 Python 客户端之间直接交换数据。
套接字编程连接两个套接字(客户端套接字和服务器套接字),并允许它们实时双向通信。 由于可以随时发送或接收数据,因此直接套接字连接能让所有实时应用程序受益。
Python 适合套接字编程吗?
是的!Python 是套接字编程的绝佳选择,因为它内置了许多所需的模块,如套接字、select 和 asyncio,可用于创建客户端-服务器应用程序。
Python 套接字有什么用途?
Python 套接字适用于需要通过网络通信的应用程序,如Web服务器、聊天应用程序或电子邮件客户端。服务器程序监听并处理传入的连接,而客户端则连接到服务器发送和接收数据。Python 套接字同时支持 TCP 和 UDP 协议,前者是一种可靠的协议,可确保数据包按顺序传送;后者是一种无连接的轻量级协议,适用于可接受数据包丢失的应用程序。
如何在 Python 中运行套接字程序?
以下指南将指导您创建一个可以相互通信的 Python 客户端和服务器。您需要分别运行这两个程序,即:
python myServer.py
python myClient.py
设置 Python 编程环境
您需要在计算机上安装稳定的 Python 3.x 版本。 如果是 Windows 用户,可以选择将 Python 添加到 PATH。
您还需要一个代码编辑器来跟进本教程。 Visual Studio Code 是一款流行的开源免费代码编辑器,支持包括 Python 在内的多种语言和框架。 VSCode 还支持 Python 扩展,以帮助完成代码和调试。
构建并运行 Python 套接字应用程序
让我们用 Python 构建一个简单的套接字应用程序。Python 提供了一个本地套接字类(套接字模块),因此开发人员无需依赖外部库。首先设置 Python 套接字编程客户端和服务器:
导入 Python socket 库
在项目目录中创建文件 client.py。要使用套接字,请导入 Python 套接字库并创建一个新的套接字对象,该对象将连接到指定的 IP 地址(在本例中,端口号为 8080 的 localhost,但也可以选择任何 IPv4 地址)。 创建与套接字服务器的新连接,向 TCP 服务器发送数据,然后关闭套接字连接。
client.py 文件应该如下所示:
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('0.0.0.0', 8080))
client.send("I am CLIENT\n".encode())
from_server = client.recv(4096)
client.close()
print (from_server.decode())
您将需要一个套接字服务器来侦听来自客户端的传入连接和消息。创建文件server.py并添加以下内容:
import socket
serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serv.bind(('0.0.0.0', 8080))
serv.listen(5)
while True:
conn, addr = serv.accept()
from_client = ''
while True:
data = conn.recv(4096)
if not data: break
from_client += data.decode('utf8')
print (from_client)
conn.send("I am SERVER\n".encode())
conn.close()
print ('client disconnected and shutdown')
Server.py 将套接字对象绑定到端口 8080 上的主机名 (localhost),并持续侦听新的客户端连接。当客户端连接到该地址时,服务器接受该连接并读取任何数据。一旦从客户端成功读取数据,服务器就会提供数据响应,此时客户端终止连接。
测试 Python 套接字编程
要亲自测试这一点,请同时打开两个终端窗口。在一个窗口中,运行:
python3 server.py
在第二个窗口中,运行:
python3 client.py
请注意,服务器会继续运行,并且每次运行客户端并附加任何新输出时都会建立一个新连接。
客户端将向服务器发送“I am CLIENT”字符串并等待回复。服务器将读取客户端的消息,将其输出到终端,并将响应发送回客户端。
到目前为止,本教程已经介绍了服务器和客户端之间的消息交换,但是如果您需要在 Python 客户端之间直接通信怎么办?
在两个或多个客户端设备之间直接发送数据很棘手,因为随着设备数量的增加,您会遇到许多扩展和安全注意事项。客户端-服务器架构用于调节和管理客户端到客户端的通信。如果您没有 Web 服务器或者担心服务器扩展以满足应用程序的需求,您可以选择托管的实时通信解决方案,例如 ZIM。ZIM 是一款实时的通信互动产品,为开发者提供全平台互动、海量并发、超低延时、消息必达的通信服务,助力打造大型直播、语聊房、客服系统等场景。
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/im/37072.html