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

yizhihongxing

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日

相关文章

  • matplotlib简介,安装和简单实例代码

    1. Matplotlib简介 Matplotlib是一个用于绘制数据可视化图形的Python库。它提供了各种绘图选项,包括线图、散点图、柱状图、饼图等。Matplotlib的优点是易于使用,同时也提供了高度的自定义性。 2. 安装Matplotlib 可以使用pip命令安装Matplotlib库。在命令行中输入以下命令: pip install matpl…

    python 2023年5月14日
    00
  • python数学建模之Numpy 应用介绍与Pandas学习

    Python数学建模之Numpy 应用介绍与Pandas学习 NumPy 应用介绍 NumPy是Python中一个非常流行的学计算库,它提供了许多常用的数学函数和工具。NumPy的主要特点是它提供高效的多维数组对象,可以进行快速的数学运算和数据处理。 数组的创建 我们可以使用NumPy库中的np.array()函数来创建数组。下面一个创建一维数组的示: im…

    python 2023年5月13日
    00
  • pytorch 转换矩阵的维数位置方法

    以下是关于“PyTorch转换矩阵的维数位置方法”的完整攻略。 背景 PyTorch是一个流行的深度学框架,可以用于构建神经网络和深度学习任务。在深度学习任务,经常需要对矩阵进行转换,以满足不同的需求。本攻略介绍如何使用PyTorch转换矩阵的维位置。 步骤 步骤一:创建矩阵 在使用PyTorch矩阵的维数位置之前,需要创建一个矩阵。以下是代码: impor…

    python 2023年5月14日
    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实现协同过滤推荐算法完整代码示例

    Python实现协同过滤推荐算法完整代码示例 协同过滤是一种常用的推荐算法,它基于用户历史行为数据,通过计算之间的相似度,来预测对未知物品的喜程度。本文将介绍协同过滤的基本原理和Python实代码示例。 协同过滤的基本原理 协过滤算法分为两种:基于用户的协同过滤和基于物品的协同过滤。基于用户的协同过滤是指据用户历史行为数据,计算用户之间的相似度,然后根相似度…

    python 2023年5月14日
    00
  • Python去除图片水印实现方法详解

    Python去除图片水印实现方法详解 在实际应用中,我们经常遇到需要去除图片水印的需求。本文将详细讲解使用Python实现去除图片水印的方法。 方法一:使用OpenCV库 OpenCV是一个非常流行的图像处理库,可以用来对图像进行各种处理。在去除图片水印中,可以使用OpenCV中的图像融合技术。 具体步骤如下: 读入原始图片和带有水印的图片 对两张图片进行尺…

    python 2023年5月13日
    00
  • Python+OpenCV实现单个圆形孔和针检测

    Python+OpenCV实现单个圆形孔和针检测 OpenCV是一个流行的计算机视觉库,可以用于图像处理和分析。本攻略将介绍如何使用Python和OpenCV实现单个圆形孔和针的检测,并提供两个示例。 步骤一:导入必要的库和模块 我们导入OpenCV库和Py库,以及一些其他必要的库和模块。下面是导入这些库和模块的代码: import cv2 import n…

    python 2023年5月14日
    00
  • 基于python解线性矩阵方程(numpy中的matrix类)

    在Python中,我们可以使用NumPy中的matrix类来解决线性矩阵方程。matrix类是NumPy中的一个子类,它提供了一些方便的方法来进行矩阵运算。以下是基于Python解线性矩阵方程的完整攻略: 创建矩阵 我们可以使用matrix类来创建矩阵。以下是一个创建矩阵的示例: import numpy as np # 创建一个2×2的矩阵 a = np.…

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