python - python错误“TypeError:函数只需要1个参数(给定0)
问题描述
出现类型错误。我想制作一个工作代码,以便我可以提交它
我正在编写代码:客户端上传文件->服务器获取文件并保存在服务器上。
客户端是kali-linux,服务器是seed-ubuntu
步
客户端回显“待上传”> file.txt cat file.txt
服务器 python server.py
客户端python client.py(服务器的ip地址)file.txt
然后,在服务器
来自 ~~~~ 文件名的连接:file.txt 文件已创建。文件.txt
应该出现,
在此之后,在服务器上,当我键入 cat file.txt 时,我应该会看到 file_context。
但我只看到错误。
这是服务器代码
服务器.py
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port = 12345
s.bind (('',port))
s.listen(5)
print "Listening..."
while True:
c, addr = s.accept()
print 'Connection from ', addr
file_name = c.recv(1024)
print "File name: ", file_name
f= open(file_name, "w")
file_context = f.write()
f.close()
c.recv(1024)
print "File created!"
c.close
这是客户端代码。
客户端.py
import socket
import sys
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((sys.argv[1], int(sys.argv[2])))
s.send(sys.argv[3])
data = s.send("")
f = open(sys.argv[3], "r")
f.read(data)
f.close()
s.close()
print 'uploaded!'
解决方案
在客户端中,您只发送文件名,而不是文件内容。您需要从文件中读取并将其发送到套接字上。您还需要一种将文件名与其余数据分隔的方法;您可以使用换行符作为分隔符(这意味着您将无法发送名称包含换行符的文件,但对于简单的玩具协议来说已经足够了)。
从文件或套接字读取时,您必须将结果分配给变量,而不是将变量放入read()
or的参数列表中recv()
。
import socket
import sys
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s
s.connect((sys.argv[1], int(sys.argv[2])))
s.send(sys.argv[3] + "\n")
with open(sys.argv[3], "r") as f
data = f.read()
s.send(data)
print 'uploaded!'
在服务器中,您只需读取一行即可获取文件名。套接字不提供readline()
方法,但有一种makefile()
方法可以创建一个文件对象,该对象使用套接字作为其底层数据源。
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s
port = 12345
s.bind (('',port))
s.listen(5)
print "Listening..."
while True:
c, addr = s.accept()
cfile = c.makefile()
print 'Connection from ', addr
file_name = cfile.readline().strip()
print "File name: ", file_name
with open(file_name, "w") as f
while True:
data = cfile.read()
if not data:
break
f.write(data)
print "File created!"
close c
推荐阅读
- json - AttributeError: '_io.TextIOWrapper' 对象没有属性 'load'
- app-store - iOS 禁用内部版本或平台(iTunes 连接)
- python - Docker FileNotFound 上的熊猫
- node.js - ts 类不是构造函数
- java - 如果在java中我覆盖“equals()”而不是hashCode()怎么办?
- angularjs - 使用 UI 视图在 angularjs 中自动滚动到顶部
- c# - C# LINQ 查询如何在开始和结束索引之间进行选择
- c# - 调用 transactionScope.Compete() 后仍有 TransactionAbortedException
- c# - ef6 和级联删除
- guice - How to configure Guice to require explicit bindings for the whole application (for all modules)