FTP、UDP、TCP发送照片Python实现

不同系统、程序之间传输照片有着多种
方式这里介绍三种:FTP、UDP、TCP。

FTP实现传输照片

FTP传输照片适合大尺寸照片,如几十兆,是应用层协议,传输层基础是TCP连接。FTP使用了两个并行的TCP来传输文件:一个是控制连接,一个是数据连接。

#服务端
# -*- coding:utf-8 -*-
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
# 实例化DummyAuthorizer来创建ftp用户
authorizer = DummyAuthorizer()
# 参数:用户名,密码,目录,权限
authorizer.add_user('admin', '123456', r'/home/....../icons/', perm='elradfmwMT')
# 匿名登录
# authorizer.add_anonymous('/home/nobody')
handler = FTPHandler
handler.authorizer = authorizer
# 参数:IP,端口,handler
server = FTPServer(('192.168.1.122', 2021), handler)  # 设置为0.0.0.0为本机的IP地址
server.serve_forever()
#客户端
# ftp互联
def ftpconnect(host, username, password):
    ftp = FTP()
    # ftp.set_debuglevel(2)
    ftp.connect(host, 2021)
    ftp.login(username, password)
    return ftp

# 从本地上传文件到ftp
def uploadfile(ftp, remotepath, localpath):
    bufsize = 1024
    fp = open(localpath, 'rb')
    ftp.storbinary('STOR ' + remotepath, fp, bufsize)
    ftp.set_debuglevel(0)
    fp.close()
  if __name__ == '__main__':
      ftp = ftpconnect(lower_ip, lower_id, lower_password)
      uploadfile(ftp, f"{file_name}", file)
      ftp.quit()

UDP实现传输照片

UDP传输照片适合小尺寸照片,如几十K,必须小于64K。

#发送
import socket

# 图像文件路径
image_path = 'littel_photos.png'

# UDP接收方的IP和端口
receiver_ip = '127.0.0.1'
receiver_port = 12345

# 创建UDP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 读取图像文件
with open(image_path, 'rb') as file:
    image_data = file.read()

# 发送图像数据
sock.sendto(image_data, (receiver_ip, receiver_port))

# 关闭套接字
sock.close()
#接收
import socket

# 本地IP和端口号
local_ip = '127.0.0.1'
local_port = 12345
while 1:
    # 创建UDP套接字
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 65536)
    # 绑定套接字到本地IP和端口号
    sock.bind((local_ip, local_port))

    # 接收数据并写入图像文件
    image_data, addr = sock.recvfrom(65536)
    with open('received_image.jpg', 'wb') as file:
        file.write(image_data)

    # 关闭套接字
    sock.close()

TCP实现传输照片

直接使用TCP连接,传输照片,文件大小不限

#发送
import socket

# 图像文件路径
image_path = '999.BMP'

# TCP接收方的IP和端口
receiver_ip = '127.0.0.1'
receiver_port = 12345

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

# 连接到TCP接收方
sock.connect((receiver_ip, receiver_port))

# 读取图像文件
with open(image_path, 'rb') as file:
    image_data = file.read()

# 发送图像数据
sock.sendall(image_data)

# 关闭套接字
sock.close()
#接收
import socket

# 本地IP和端口号
local_ip = '127.0.0.1'
local_port = 12345

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

# 绑定套接字到本地IP和端口号
sock.bind((local_ip, local_port))

# 监听连接
sock.listen(1)

# 等待客户端连接
client_sock, client_addr = sock.accept()

# 接收图像数据并写入图像文件
with open('received_image.jpg', 'wb') as file:
    while True:
        data = client_sock.recv(65536)
        if not data:
            break
        file.write(data)

# 关闭客户端套接字和服务器套接字
client_sock.close()
sock.close()
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
python-UDP是指在Python编程语言中使用UDP协议进行网络通信。UDP是一种无连接的传输层协议,不需要建立连接即可发送和接收数据。与TCP相比,UDP的效率更高,但也不可靠,容易丢失数据。使用UDP的常见服务有DNS和FTP等。在Python中,可以使用socketserver模块实现UDP传输协议的并发通信。通过创建UDP报头并指定接收端的IP和端口信息,可以使用sendto()方法发送数据,recvfrom()方法接收数据。在使用recvfrom()方法时,它是阻塞的,每次接收一定数量的数据,若发送的数据超过接收的数量,就会丢失数据。因此,UDP不会出现数据粘包的情况,但也需要注意数据的丢失问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python-UDP协议](https://blog.csdn.net/qq_48985780/article/details/121877448)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python - UDP通信](https://blog.csdn.net/weixin_39940253/article/details/110761121)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值