python - python socket:在两台计算机之间发送文件
问题描述
我正在尝试在两台计算机之间下载文件。服务器端计算机将下载文件,客户端计算机将文件发送到服务器端计算机。我写了下面的代码来实现这种情况,但是出了点问题。下面的代码有什么问题。
# server
import socket
import os
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("10.0.2.15", 5555))
s.listen(100)
c, addr = s.accept()
def save_file(file_name):
while 1:
c.send(file_name.encode())
confirmation = c.recv(1024).decode()
if confirmation == "file-doesn't-exist":
print("File doesn't exist on server.")
else:
write_name = file_name[9:]
with open(write_name, 'wb') as _file:
while 1:
data = c.recv(1024)
if not data:
break
file.write(data)
return '[+] ' + write_name + ' successfully downloaded.'
def run():
while 1:
data = ""
cmd = raw_input('command>> ')
if cmd[:8] == "download":
data = save_file(cmd)
print(data)
if __name__ == "__main__":
run()
#client
import socket
import os
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect("10.0.2.15", 5555)
def send_file(path):
if not os.path.exists(path):
s.send("file-doesn't-exist".encode())
else:
s.send("file-exists".encode())
if path != "":
_file = open(path, "rb")
path = _file.read(1024)
while path:
s.send(path)
path = _file.read(1024)
def run():
command = s.recv(1024).decode()
if command[:8] == "download":
s.send(command[9:])
if __name__ == "__main__":
run()
解决方案
推荐阅读
- javascript - 如何跟踪所有用户对 Jira 网站按钮的点击次数
- javascript - 在打字稿中交换多维数组中的元素
- jupyter-notebook - 将虚拟环境添加到 conda 后,无法打开打开的 jupyter 笔记本。为什么?
- ios - Unity iOS 构建失败:Xcode 中语音识别的重复符号
- solr - Hue Solr 标记图限制为 25
- javascript - 为什么“this.checked”有效但“$(”#acept").checked”无效?
- r-markdown - 有谁知道 RMarkdown 是否可以调整 PowerPoint 输出的字体颜色?
- spring-boot - 限制对多个 keycloak 客户端的访问。每个配置或令牌
- php - 在其他文件中获取 $_GET 变量
- node.js - 移动应用技术建议