Python socket之TCP通信及下载文件的实现

Python socket之TCP通信及下载文件的实现

TCP通信简介

TCP通信是一种面向连接的、可靠的、基于流的传输协议。在TCP连接中,客户端和服务器必须先建立连接,然后通过连接进行数据传输。TCP协议保证了数据的可靠性,它能够检测丢失的数据并自动重传,以确保数据的完整性。

Python实现TCP通信

Python中实现TCP通信可使用socket库。需要注意的是,在客户端和服务器端均要导入socket库。下面将分别介绍客户端和服务器端的实现代码。

客户端

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 创建TCP连接

host = '127.0.0.1'  # 服务器地址
port = 12345  # 服务器端口

sock.connect((host, port))  # 连接服务器

# 发送消息
sock.sendall(bytes('Hello, server!', encoding='utf-8'))

# 接收并输出服务器的回复
received_message = sock.recv(1024)
print("Received: {}".format(received_message.decode('utf-8')))

sock.close()  # 关闭TCP连接

服务器端

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 创建TCP连接

host = '127.0.0.1'  # 服务器地址
port = 12345  # 服务器端口

sock.bind((host, port))  # 绑定地址和端口

sock.listen()  # 开始监听

print("Server is running...")

while True:
    # 接受一个新连接
    connection, address = sock.accept()

    # 打印客户端地址
    print("Connected by {}".format(address))

    # 接收并输出客户端的消息
    data = connection.recv(1024)
    print("Received: {}".format(data.decode('utf-8')))

    # 发送回复
    connection.sendall(bytes('Hello, client!', encoding='utf-8'))

    connection.close()  # 关闭连接

下载文件的实现

可以使用socket库实现文件传输。下面将分别介绍客户端和服务器端的实现代码。

服务器端

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 创建TCP连接

host = '127.0.0.1'  # 服务器地址
port = 12345  # 服务器端口

sock.bind((host, port))  # 绑定地址和端口

sock.listen()  # 开始监听

print("Server is running...")

while True:
    # 接收一个新连接
    connection, address = sock.accept()

    # 打印客户端地址
    print("Connected by {}".format(address))

    # 接收文件名
    file_name = connection.recv(1024).decode('utf-8')

    # 打开文件并发送
    with open(file_name, 'rb') as f:
        data = f.read(1024)
        while data:
            connection.sendall(data)
            data = f.read(1024)
        print("File sent successfully!")

    connection.close()  # 关闭连接

客户端

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 创建TCP连接

host = '127.0.0.1'  # 服务器地址
port = 12345  # 服务器端口

sock.connect((host, port))  # 连接服务器

# 发送文件名
sock.sendall(bytes('example.txt', encoding='utf-8'))

# 接收文件并保存
with open('example_downloaded.txt', 'wb') as f:
        data = sock.recv(1024)
        while data:
            f.write(data)
            data = sock.recv(1024)
        print("File downloaded successfully!")

sock.close()  # 关闭TCP连接

在这个示例中,客户端向服务器发送一个文件名,服务器接收到后打开文件并将其以二进制方式切割为1024字节的块,然后将每个块通过TCP连接发送到客户端。客户端接收到文件块后直接写入本地文件即可。需要注意的是,在发送文件名和文件的过程中,一定要保证编码方式的一致性,否则会出现解码失败的情况。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python socket之TCP通信及下载文件的实现 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • Python import导入上级目录文件的方法

    当我们在Python中使用import语句导入模块或者包时,通常会将它们放在同一个文件夹中,但有时候我们需要在当前文件夹之外的上级目录下导入模块或包。本文将详细讲解如何在Python中import导入上级目录文件的方法。 方法一:使用sys.path.append() 第一种方法是使用sys.path.append()来向Python解释器的搜索路径中添加上…

    python 2023年5月14日
    00
  • numpy中的converters和usecols用法详解

    在NumPy中,loadtxt()函数是一个常用的函数,用于从文本文件中加载数据到NumPy数组中。在使用loadtxt()函数时,可以使用converters和usecols参数来指数据类型转换和读取列数。本文将详细讲解“numpy中的converters和usecols用法详解”,包括如何使用这个参数的方法。 示例1:使用converters参数 在这个…

    python 2023年5月14日
    00
  • 使用Python操作Elasticsearch数据索引的教程

    使用Python操作Elasticsearch数据索引的教程 Elasticsearch 是一个开源搜索引擎,可以存储和检索各种类型的数据。Python 作为一种流行的编程语言,支持 Elasticsearch 的 API,可以用它来操作 Elasticsearch 中的数据。本文将介绍如何使用 Python 操作 Elasticsearch 的数据索引。 …

    python 2023年5月13日
    00
  • python安装numpy和pandas的方法步骤

    以下是关于“Python安装NumPy和Pandas的方法步骤”的完整攻略。 NumPy的安装步骤 步骤1:安装pip 在安装NumPy之前,需要先安装pip。pip是Python的器,可以用来安装和管理Python包。 在Linux和MacOS上,可以使用以下命令安装pip: sudo apt-get install python3-p 在Windows上…

    python 2023年5月14日
    00
  • 如何使用Python修改matplotlib.pyplot.colorbar的位置以对齐主图

    如何使用Python修改matplotlib.pyplot.colorbar的位置以对齐主图 在本攻略中,我们将介绍如何使用Python修改matplotlib.pyplot.colorbar的位置以对齐主图。我们将提供两个示例,演示如何使用Python修改matplotlib.pyplot.colorbar的位置以对齐主图。 问题描述 在数据可视化中,ma…

    python 2023年5月14日
    00
  • Python实现npy/mat文件的保存与读取

    在Python中,可以使用numpy库实现npy/mat文件的保存与读取。以下是实现npy/mat文件的保存与读取的步骤: 保存npy文件 可以使用numpy库的save()函数保存npy文件。以下是保存npy文件的示例代码: import numpy as np data = np.array([1, 2, 3, 4, 5]) np.save(‘data.…

    python 2023年5月14日
    00
  • 支持python的分布式计算框架Ray详解

    支持Python的分布式计算框架Ray详解 Ray是一个支持Python的分布式计算框架,它可以帮助用户轻松地编写并行和分布式应用程序。Ray提供了一组API,使得编写行和分布式应用程序变得更加容易。本文将详细介绍Ray的特点、使用方法和示例。 Ray的特点 Ray具有以下特点: 简单易用:Ray提供了一组简单易用的API,使得编写并行和分布式应用程序变得更…

    python 2023年5月14日
    00
  • pytorch 中transforms的使用详解

    PyTorch中Transforms的使用详解 在本攻略中,我们将介绍如何使用PyTorch中的Transforms对图像进行预处理和数据增强。我们将提供两个示例,演示如何使用Transforms对图像进行裁剪和旋转。 问题描述 在深度学习中,数据预处理和数据增强是非常重要的步骤。PyTorch中的Transforms提供了一种方便的方式来对图像进行预处理和…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部