TypeError出现。 我想编写一个工作代码,以便我可以提交它
我正在编写代码 :客户端上传文件->服务器获取文件并保存在服务器上。
客户端是kali-linux,服务器是seed-ubuntu
STEP
客户端 回显“待上传”> file.txt 猫file.txt
服务器 python server.py
客户端 python client.py(服务器的IP地址)file.txt
然后,在服务器上
~~~~的连接 文件名:file.txt 文件已创建。 file.txt
应该出现,
然后,在服务器上 当我输入cat file.txt时 我应该看到file_context。
但是我只看到错误。
这是服务器代码
server.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
这是客户端代码。
client.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!'
答案 0 :(得分:0)
在客户端中,您仅发送文件名,而不发送文件内容。您需要从文件读取并将其发送到套接字。您还需要一种从其他数据中分隔文件名的方法。您可以使用换行符作为分隔符(这意味着您将无法发送名称包含换行符的文件,但对于简单的玩具协议来说已经足够了。)
从文件或套接字读取数据时,必须将结果分配给变量,而不是将变量放入read()
或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