python错误“ TypeError:函数正好接受1个参数(给定0)

时间:2018-12-19 19:27:01

标签: python linux sockets

TypeError出现。 我想编写一个工作代码,以便我可以提交它

我正在编写代码 :客户端上传文件->服务器获取文件并保存在服务器上。

客户端是kali-linux,服务器是seed-ubuntu

STEP

  1. 客户端 回显“待上传”> file.txt 猫file.txt

  2. 服务器 python server.py

  3. 客户端 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!'

1 个答案:

答案 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