目录格式:

构建此目录就可随意使用!

client端

import socket
import sys
import os
import json
import struct sk = socket.socket()
adress = ('192.168.12.11', 29231) def upload():
message = {'filename': None, 'filesize': None}
sk.connect(adress)
temp = '上传'
sk.send(temp.encode('utf-8'))
meg = input('输入文件路径:')
filename = os.path.basename(meg)
filesize = os.path.getsize(meg)
message['filename'] = filename
message['filesize'] = filesize
str_message = json.dumps(message)
len_message = len(str_message)
b_len_message = struct.pack('i', len_message)
sk.send(b_len_message + str_message.encode('utf-8'))
with open(meg, 'rb') as f:
while filesize:
connent = f.read()
sk.send(connent)
filesize -= len(connent) def download():
path = os.path.dirname(os.path.abspath(__file__))
sk.connect(adress)
temp = '下载'
sk.send(temp.encode('utf-8'))
num = sk.recv(1024).decode('utf-8')
print('可下载文件:%s' % (num,))
name = input('输入下载文件名称:')
sk.send(name.encode('utf-8'))
path = '/'.join([path, '本地文件', name])
b_len_message = sk.recv(4)
len_message = struct.unpack('i', b_len_message)[0]
res_s = sk.recv(len_message).decode('utf-8')
str_message = json.loads(res_s)
filesize = str_message['filesize']
with open(path, 'ab') as f:
while filesize:
connent = sk.recv(1024)
f.write(connent)
f.flush()
filesize -= len(connent) def main():
dic = [
('上传', 'upload'),
('下载', 'download')
]
for i in enumerate(dic, 1):
print(i[0], i[1][0])
num = int(input('请输入选项:'))
getattr(sys.modules[__name__], dic[num - 1][1])()
sk.close() if __name__ == '__main__':
main()

server端

import socket
import struct
import os
import json path = os.path.abspath(__file__)
path = os.path.dirname(path)
sk = socket.socket()
adress = ('0.0.0.0', 29231)
sk.bind(adress)
sk.listen(4)
conn, addr = sk.accept() def upload(path):
b_len_message = conn.recv(4)
len_message = struct.unpack('i', b_len_message)[0]
res_s = conn.recv(len_message).decode('utf-8')
str_message = json.loads(res_s)
filename = '1' + str_message['filename']
filesize = str_message['filesize']
path = '/'.join([path, '客户端上传的文件', filename])
with open(path, 'ab') as f:
while filesize:
connent = conn.recv(1024)
f.write(connent)
f.flush()
filesize -= len(connent) def download(path):
message = {'filename': None, 'filesize': None}
res = os.listdir('/'.join([path, '客户端上传的文件']))
sum = ''
for i in res:
sum = sum + ' ' + i + ' '
conn.send(sum.encode('utf-8'))
filename = conn.recv(1024).decode('utf-8')
path = '/'.join([path, '客户端上传的文件', filename])
filesize = os.path.getsize(path)
message['filename'] = path
message['filesize'] = filesize
str_message = json.dumps(message)
len_message = len(str_message)
b_len_message = struct.pack('i', len_message)
conn.send(b_len_message + str_message.encode('utf-8')) with open(path, 'rb') as f:
while filesize:
connent = f.read()
conn.send(connent)
filesize -= len(connent) def main():
res_s = conn.recv(1024).decode('utf-8')
if res_s == '上传':
upload(path)
sk.close()
if res_s == '下载':
download(path)
sk.close() if __name__ == '__main__':
while 1:
main()

基于Tcp协议的上传下载的更多相关文章

  1. C#实现http协议支持上传下载文件的GET、POST请求

    C#实现http协议支持上传下载文件的GET.POST请求using System; using System.Collections.Generic; using System.Text; usin ...

  2. Linux shell:FTP(文件传输协议)上传下载命令

    SecureCRT通过ftp将nmon上传,建立一个目录,用命令上传文件.[命令见下面] 或通过UE.SSH上传/下载,使用sftp建立链接. [通过cmd进入ftp服务器]先假设有一FTP服务器,F ...

  3. java 26 - 9 网络编程之 TCP协议多用户上传文件

    TCP实现多用户上传文件: 需要同时给多用户上传文件,这样就得用多线程来实现. 实际上,这样的话,上传的先后顺序和速度就跟客户端的带宽有关:带宽够,就容易抢占到线程的执行权: 首先,创建个线程类:(这 ...

  4. 基于struts2--实现文件上传下载

    1. 文件的上传: 1). 表单需要注意的 3 点 ①. method="post"     ②. enctype="mulitipart/form-data" ...

  5. Java 网络编程 -- 基于TCP实现文件上传

    Java TCP 操作基本流程 一.创建服务器 1.指定端口, 使用serverSocket创建服务器 2.阻塞式连接 accept 3.操作:输入流 输出流 4.释放资源 二.创建客户端 1.使用S ...

  6. Java网络编程(TCP协议-练习-上传文本文件)

    客户端: package WebProgramingDemo; import java.io.BufferedReader; public class UploadTextClient { /** * ...

  7. JAVA 基于TCP协议的一对一,一对多文件传输实现

    最近老师给我们上了多线程和TCP和UDP协议,其中一个要求就是我们用JAVA协议一个基于TCP和UDP这两种协议的一对一文件上传和一对多文件上传. 然后我就开始分析TCP和UDP这两个协议的特点,发现 ...

  8. Java实现FTP批量大文件上传下载篇1

    本文介绍了在Java中,如何使用Java现有的可用的库来编写FTP客户端代码,并开发成Applet控件,做成基于Web的批量.大文件的上传下载控件.文章在比较了一系列FTP客户库的基础上,就其中一个比 ...

  9. 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)

    1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...

随机推荐

  1. error C2065: 'CArchiveStream' : undeclared identifier

    release:模式下 问题: 在导入JPEG文件时要使用到  CArchiveStream类  但是编译的时候会出现  'CArchiveStream'   :   undeclared   ide ...

  2. $.ajax 使用详解

    Jquery在异步提交方面封装的很好,直接用AJAX非常麻烦,Jquery大大简化了我们的操作. $.post.$.get是一些简单的方法,如果要处理复杂的逻辑,还是需要用到jQuery.ajax() ...

  3. (转)React Native 使用react-native-image-picker库实现图片上传功能

    react-native-image-picker作为一个集成相机和相册的功能的第三方库,因为其使用相对简单受到前端开发人员的喜爱. react-native-image-picker使用 首先,安装 ...

  4. ios很好的开源库

    Tim9Liu9/TimLiu-iOS 自己总结的iOS.mac开源项目及库,持续更新.. 目录 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD ...

  5. ref 与 $refs 如何关联

    先问大家一个简单的问题: 还有人记得 jquery 里面的 data 方法是如何让 DOM 节点绑定对应的数据对象的吗 有时候我们做节点关联设计的思路其实有一点类似,但是在 vue 里面多了很多概念, ...

  6. 无线网络中的MAC协议(1)

    前文我们对传统的有线网络的MAC协议进行了分析,接下来我们在对无线网络的MAC也进行一个详细的介绍.那么无线网络中的MAC工作方式是如何的呢?无线局域网(WLAN)中MAC所对应的标准为IEEE 80 ...

  7. Swift(一)简单值

    Swift的源文件扩展名是.swift 按照国际惯例,学习一门新语言写的第一个程序都是在屏幕上输出一句 “Hello, world!” .在Swift里,一行代码就搞定了: 如果你以前写过C或者Obj ...

  8. ZOJ 3706 Break Standard Weight 解题报告

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5009 题目意思:给出两个mass:x 和 y,问如何将其中一个 ma ...

  9. hdu 2594 Simpsons’ Hidden Talents(两个串的next数组)

    题意:两个字符串s.t,求s和t的最长的相同的前缀和后缀 思路:先求s的next数组,再求t的next数组(即代码中ex数组,此时不是自己与自己匹配,而是与s匹配),最后看ex[len2]即可(len ...

  10. bzoj 1657 Mooo 奶牛的歌声 —— 单调栈

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1657 单调栈水题. 代码如下: #include<iostream> #incl ...