python:通过TCP协议,实现文件的上传下载
- 客户端client
VMware和Windows上要注意decode(“UTF-8”) decode(“GBK”)
from socket import *
def hello_page():
print("-----欢迎进入系统-----")
print(" 1 下载文件 ")
print(" 2 上传文件 ")
print(" 3 退出 ")
print("--------------------")
def download(tcp_client_socket):
while True:
file_name = input("请输入你要下载的文件名(输入exit退出):")
tcp_client_socket.send(file_name.encode("utf-8"))
if file_name == "exit":
return
recv_data = tcp_client_socket.recv(1024 * 1024)
if recv_data.decode("utf-8") == "未找到文件...":
print("没有相应资源,下载失败...")
elif recv_data:
with open("下载——" + file_name, "wb") as f:
f.write(recv_data)
print("下载文件%s成功" % file_name)
def shangchuan(tcp_client_socket):
print("上传中......")
while True:
shangchuan_file_name = input("请输入要上传的文件名(输入exit退出):")
tcp_client_socket.send(shangchuan_file_name.encode("utf-8"))
if shangchuan_file_name == "exit":
tcp_client_socket.send(shangchuan_file_name.encode("utf-8"))
break
file_content = None
try:
f = open(shangchuan_file_name, "rb")
file_content = f.read()
f.close()
except Exception as e:
print("未找到该文件......")
if file_content:
tcp_client_socket.send(file_content)
print("已上传文件%s " % shangchuan_file_name)
def main():
tcp_client_socket = socket(AF_INET, SOCK_STREAM)
tcp_client_socket.connect(("192.168.11.99", 6666))
while True:
hello_page()
select_num = input("请输入您的操作序号:")
if select_num == "1":
tcp_client_socket.send(select_num.encode("utf-8"))
download(tcp_client_socket)
elif select_num == "2":
tcp_client_socket.send(select_num.encode("utf-8"))
shangchuan(tcp_client_socket)
elif select_num == "3":
tcp_client_socket.send(select_num.encode("utf-8"))
break
else:
print("请重新输入...")
tcp_client_socket.close()
if __name__ == '__main__':
main()
from socket import *
def download(client_socket):
print("下载中......")
while True:
file_name = client_socket.recv(1024).decode("utf-8")
if file_name == "exit":
print("用户返回选择页面")
break
file_content = None
try:
f = open(file_name, "rb")
file_content = f.read()
f.close()
except Exception as e:
client_socket.send("未找到文件...".encode("utf-8"))
if file_content:
client_socket.send(file_content)
print("已发送%s:" % str(file_name))
# client_socket.close()
def shangchuan(client_socket):
print("用户正在上传文件中...")
while True:
file_name = client_socket.recv(1024).decode("utf-8")
if file_name == "exit":
print("用户返回选择页面")
break
print("----------")
recv_data = client_socket.recv(1024*1024)
f = open("上传——" + file_name, "wb")
f.write(recv_data)
f.close()
print("文件%s上传成功..." % file_name)
def main():
tcp_server_socket = socket(AF_INET, SOCK_STREAM)
tcp_server_socket.bind(("", 6666))
tcp_server_socket.listen(128)
while True:
client_socket, client_addr = tcp_server_socket.accept()
print("%s客户端链接成功..." % str(client_addr))
while True:
select_num = client_socket.recv(1024).decode("utf-8")
if select_num == "1":
download(client_socket)
elif select_num == "2":
shangchuan(client_socket)
elif select_num == "3":
print("客户端断开了链接")
break
client_socket.close()
# tcp_server_socket.close()
if __name__ == '__main__':
main()