python基础实现tcp文件传输

摘要:
准备上传文件需要哪些工具?

准备工作,实现文件上传需要那些工具呢?

  socket(传输)、open()(打开文件)、os(读取文件信息),当然还有辅助类sys和json,下面我们开始吧

import socket,sys
import json,os

#创建socket对象
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#获取本地主机名
host = socket.gethostname()

#设置端口号
port = 9000

#绑定端口
server.bind((host,port))

#设置最大连接数
server.listen(5)

#建立连接
while True:
    print('开始监听')
    #建立客户端连接
    clint,addr = server.accept()
    print("连接地址: %s" % str(addr))
    #接收文件属性数据,创建文件
    jsonObj = json.loads(clint.recv(1024).decode('utf-8'))
    print('接收到数据',jsonObj)
    if not jsonObj :
        os.mknod(jsonObj['name'])
    msg = json.dumps({'name':'消息','信号':'创建成功'})
    #回数据确认已经建立新文件
    clint.send(msg.encode('utf-8'))
    #接收数据
    size = 0
    sizeValue = int(jsonObj['size'])
    print('开始接收数据')
    with open(jsonObj['name'], 'wb') as file:
        while size < sizeValue:
            value = sizeValue - size
            if value >1024:
                getdate = clint.recv(1024)
            else :
                getdate = clint.recv(value)
            file.write(getdate)
            size += 1024
    print('结束')
    #关闭连接
    clint.close()

客户端

'''发送文件
Usage:
clint.py <name> [<rename>]

'''
import socket
import os,json,sys

#建立json数据,包含文件名以及大小
#{name:name,size:99999}
date = {}
if len(sys.argv) == 2:
    print(type(sys.argv[1]))
    name = sys.argv[1].split('\')[-1]
    date['name'] = name
else:
    date['name'] = sys.argv[2]
date['size'] = os.path.getsize(sys.argv[1])
jsonString = json.dumps(date).encode('utf-8')

#create connection
clint = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
# 设置端口好
port = 9000
# 连接服务,指定主机和端口
clint.connect((host, port))
#发送文件属性信息
clint.send(jsonString)
#接收服务端发过来的确认信息
clint.recv(1024)
#发送文件数据
size = 0
with open(sys.argv[1],'rb') as file:
    while size < date['size']:
        fileDate = file.read(1024)
        clint.send(fileDate)
        size += 1024
#关闭连接
clint.close()

免责声明:文章转载自《python基础实现tcp文件传输》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇UI设计教程-界面设计构图分水岭算法实现图像分割及其应用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Windows Socket 编程_ 简单的服务器/客户端程序 .

一。程序运行效果图 二。程序源代码 三。程序设计相关基础知识 1.计算机网络2.IP地址3.协议4.网络体系结构5.TCP/IP体系结构与特点6.客户机/服务器模式7.TCP/IP特点8.套接字的引入9.面向 连接/无连接 的套接字的系统调用时序图/流程图 一。程序运行效果图 二。程序源代码 [cpp]view plaincopyprint?...

Linux| |对于UDP的学习

# 前序 UDP(用户数据报协议)没有连接的,是面向数据报的,是不可靠 # 套接字就是IP地址+端口号 IP地址:4字节 端口号:2字节,也就是说范围是0~65536 端口号分为 知名端口号 0--1023:http,ssh,ftp,telnet等一些协议端口号都是固定的,对于操作系统来说是不能对其进行分配的 一些固定的端口号 ssh服务器,使用22端口...

HTTP长连接、短连接究竟是什么?

1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。 IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序与发送顺序一致。TCP协议是可靠的、面向连接的。...

python基础整理6——爬虫基础知识点

 爬虫基础 什么是爬虫: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。 通用爬虫和聚焦爬虫 根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用网络爬虫 是 捜索引擎抓取系...

【python】threadpool的内存占用问题

先说结论: 在使用多线程时,不要使用threadpool,应该使用threading, 尤其是数据量大的情况。因为threadpool会导致严重的内存占用问题! 对比threading和threadpool的内存占用 # coding=utf-8 import time import os import psutil import json...

【SEED Labs】TCP Attacks Lab

Lab Overview 实验环境下载:https://seedsecuritylabs.org/Labs_16.04/Networking/TCP_Attacks/ 本实验涵盖以下课题: • TCP SYN flood attack, and SYN cookies • TCP reset attack • TCP session hijacking at...