python中TCP回声服务器与客户端示例

简介: 【4月更文挑战第7天】本示例展示了TCP回声服务器和客户端的工作流程。服务器监听特定端口,接收客户端连接请求,接收数据并回显。客户端连接服务器,发送数据并接收回显。代码示例用Python实现,包括服务器的`socket.bind()`, `socket.listen()`, `socket.accept()`和客户端的`socket.connect()`, `socket.sendall()`, `socket.recv()`。运行示例时,先启动服务器再启动客户端,可观察TCP连接和数据传输过程。了解这些基础对于构建网络应用至关重要。

在本小节中,我们将通过一个简单的示例来演示TCP回声服务器与客户端的工作流程。回声服务器是一种简单的服务器程序,它会将接收到的任何数据原样发送回客户端。通过实现这样一个服务器和客户端,我们可以更好地理解TCP连接和数据传输的过程。

一、TCP回声服务器

首先,我们来实现一个TCP回声服务器。服务器需要监听一个特定的端口,等待客户端的连接请求,并在连接建立后接收并回显客户端发送的数据。

import socket

# 创建TCP Socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定IP地址和端口号
server_address = ('127.0.0.1', 12345)
server_socket.bind(server_address)

# 开始监听连接请求
server_socket.listen(1)
print(f"Listening on {server_address[0]}:{server_address[1]}")

while True:
    # 接受客户端连接请求
    print("Waiting for a connection...")
    connection, client_address = server_socket.accept()
    try:
        print(f"Connection from {client_address}")

        # 接收数据并回显
        while True:
            data = connection.recv(1024)
            if not data:
                break
            print(f"Received {len(data)} bytes from {client_address}")
            connection.sendall(data)
    finally:
        # 关闭连接
        connection.close()

在上面的代码中,我们创建了一个TCP Socket对象,并绑定了服务器的IP地址和端口号。然后,通过调用listen()方法开始监听连接请求。在无限循环中,我们使用accept()方法接受客户端的连接请求,并在一个内部循环中接收数据并回显给客户端。当客户端关闭连接或发送空数据时,内部循环会结束,并关闭连接。

二、TCP回声客户端

接下来,我们实现一个简单的TCP回声客户端。客户端需要连接到服务器,发送数据,并接收服务器的回显。

import socket

# 创建TCP Socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到服务器
server_address = ('127.0.0.1', 12345)
print(f"Connecting to {server_address[0]}:{server_address[1]}")
client_socket.connect(server_address)

try:
    # 发送数据
    message = 'Hello, Echo Server!'
    print(f"Sending {message}")
    client_socket.sendall(message.encode('utf-8'))

    # 接收回显数据
    amount_received = 0
    amount_expected = len(message)

    while amount_received < amount_expected:
        data = client_socket.recv(16)
        amount_received += len(data)
        print(f"Received {len(data)} bytes")
        if data:
            print(f"Received {data.decode('utf-8')}")
finally:
    # 关闭连接
    print("Closing connection")
    client_socket.close()

在客户端代码中,我们创建了一个TCP Socket对象,并使用connect()方法连接到服务器。然后,我们发送一条消息给服务器,并使用一个循环来接收服务器的回显数据,直到接收到的数据长度等于我们发送的消息长度。最后,我们关闭连接。

三、运行示例

要运行这个示例,首先启动回声服务器,然后在另一个终端或窗口中启动回声客户端。你会看到服务器输出连接信息和接收到的数据长度,而客户端会输出发送的消息和接收到的回显数据。

四、总结

通过实现一个简单的TCP回声服务器与客户端示例,我们演示了TCP连接和数据传输的基本流程。在实际应用中,你可以根据需要在服务器和客户端之间传输更复杂的数据结构,并实现更复杂的交互逻辑。掌握这些基本概念和技术将帮助你构建功能强大的网络应用程序。

相关文章
|
1月前
|
移动开发 JavaScript 前端开发
精通服务器推送事件(SSE)与 Python 和 Go 实现实时数据流 🚀
服务器推送事件(SSE)是HTML5规范的一部分,允许服务器通过HTTP向客户端实时推送更新。相比WebSocket,SSE更轻量、简单,适合单向通信场景,如实时股票更新或聊天消息。它基于HTTP协议,使用`EventSource` API实现客户端监听,支持自动重连和事件追踪。虽然存在单向通信与连接数限制,但其高效性使其成为许多轻量级实时应用的理想选择。文中提供了Python和Go语言的服务器实现示例,以及HTML/JavaScript的客户端代码,帮助开发者快速集成SSE功能,提升用户体验。
|
27天前
|
XML JSON API
淘宝商品详情API的调用流程(python请求示例以及json数据示例返回参考)
JSON数据示例:需要提供一个结构化的示例,展示商品详情可能包含的字段,如商品标题、价格、库存、描述、图片链接、卖家信息等。考虑到稳定性,示例应基于淘宝开放平台的标准响应格式。
|
22天前
|
Python
使用Python实现multipart/form-data文件接收的http服务器
至此,使用Python实现一个可以接收 'multipart/form-data' 文件的HTTP服务器的步骤就讲解完毕了。希望通过我的讲解,你可以更好地理解其中的逻辑,另外,你也可以尝试在实际项目中运用这方面的知识。
126 69
|
19天前
|
存储 监控 API
【Azure App Service】分享使用Python Code获取App Service的服务器日志记录管理配置信息
本文介绍了如何通过Python代码获取App Service中“Web服务器日志记录”的配置状态。借助`azure-mgmt-web` SDK,可通过初始化`WebSiteManagementClient`对象、调用`get_configuration`方法来查看`http_logging_enabled`的值,从而判断日志记录是否启用及存储方式(关闭、存储或文件系统)。示例代码详细展示了实现步骤,并附有执行结果与官方文档参考链接,帮助开发者快速定位和解决问题。
72 23
|
1月前
|
Docker Python 容器
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。
175 0
|
1月前
|
JSON 监控 API
python语言采集淘宝商品详情数据,json数据示例返回
通过淘宝开放平台的API接口,开发者可以轻松获取商品详情数据,并利用这些数据进行商品分析、价格监控、库存管理等操作。本文提供的示例代码和JSON数据解析方法,可以帮助您快速上手淘宝商品数据的采集与处理。
|
2月前
|
Go Python
Python中的round函数详解及使用示例
`round()`函数是Python内置的用于四舍五入数字的工具。它接受一个数字(必需)和可选的小数位数参数,返回最接近的整数或指定精度的浮点数。本文详细介绍其用法、参数及示例,涵盖基本操作、负数处理、特殊情况及应用建议,帮助你更好地理解和运用该函数。
169 2
|
3月前
|
数据挖掘 数据处理 开发者
Python3 自定义排序详解:方法与示例
Python的排序功能强大且灵活,主要通过`sorted()`函数和列表的`sort()`方法实现。两者均支持`key`参数自定义排序规则。本文详细介绍了基础排序、按字符串长度或元组元素排序、降序排序、多条件排序及使用`lambda`表达式和`functools.cmp_to_key`进行复杂排序。通过示例展示了如何对简单数据类型、字典、类对象及复杂数据结构(如列车信息)进行排序。掌握这些技巧可以显著提升数据处理能力,为编程提供更强大的支持。
93 10
|
4天前
|
存储 缓存 弹性计算
阿里云经济型e实例云服务器评测:企业官网搭建的性价比之选
阿里云服务器经济型e实例可以用来搭建企业网站吗?云服务器作为搭建企业官网的基础设施,其性能、稳定性、成本等因素直接影响着官网的运营效果。阿里云经济型e实例云服务器作为一款性价比较高的产品,备受用户关注。许多企业在选择云服务器搭建官网时,都会将其纳入考虑范围。本文将详细探讨阿里云经济型e实例云服务器的特点、性能表现、稳定性与可靠性,以及成本考量,最终解答是否适合用它来搭建企业官网。
|
30天前
|
存储 缓存 网络协议
阿里云特惠云服务器99元与199元配置与性能和适用场景解析:高性价比之选
2025年,阿里云长效特惠活动继续推出两款极具吸引力的特惠云服务器套餐:99元1年的经济型e实例2核2G云服务器和199元1年的通用算力型u1实例2核4G云服务器。这两款云服务器不仅价格亲民,而且性能稳定可靠,为入门级用户和普通企业级用户提供了理想的选择。本文将对这两款云服务器进行深度剖析,包括配置介绍、实例规格、使用场景、性能表现以及购买策略等方面,帮助用户更好地了解这两款云服务器,以供参考和选择。

热门文章

最新文章

下一篇
oss创建bucket
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等