Python - AttributeError:'tuple'对象没有属性'read'

时间:2013-12-21 00:19:11

标签: python

我正在研究一个简单的python客户端和服务器,它可以在发送文件时将代码写入文件。到目前为止,我一直坚持这个错误:AttributeError:'tuple'对象没有属性'read'

这是客户的代码:

# CCSP Client
# (C) Chris Dorman - 2013 - GPLv2

import socket
import sys

# Some settings
host = raw_input('Enter the Host: ')
port = 7700
buff = 24
connectionmax = 10

# Connect to server
server = socket.socket()
server.connect((host, port))

print 'Connected!'

while True:
    open_file = raw_input("File (include path): ")
    fcode = open(open_file, "rb")
    while True:
        readcode = fcode.read(buff)
        server.send(readcode)
        if not fcode:
            server.send("OK\n")
            print "Transfer complete"
            break

服务器:

# CCSP Server
# (C) Chris Dorman - 2013 - GPLv2

import socket
import sys
import string
import random

def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
    return ''.join(random.choice(chars) for x in range(size))

host = "0.0.0.0"
port = 7700
buff = 1024
filepath = "/home/chris/"
extension = ".txt"

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((host, port))

print "Server Started"


while True:
    server.listen(1)
    conn = server.accept()  
    print 'Client' + str(conn)
    print 'Generating a random file'
    filename = filepath + str(id_generator()) + extension
    fcode = open(filename, "wb")
    while True:
        if conn != 0: 
            code = conn.read(buff)
            fcode.write(buff)
            if conn == "DONE": 
                print 'Transfer complete'
                break #EOT

任何帮助实现这一点的帮助都会很棒。我只是在服务器脚本

上遇到code = conn.read(buff)时遇到了这个愚蠢的错误

2 个答案:

答案 0 :(得分:2)

您应该阅读some docaccept()返回一个元组而不是类似文件的对象。

答案 1 :(得分:0)

正如其他人所指出的那样,accept()会返回一个元组。看起来你想要元组中的第一个项目,它将是一个新的套接字对象。

当然,套接字也没有read()方法。我猜你真正想要的是:

code = conn.recv(buff)

由于recv()返回已写入套接字连接的数据。