Python:AttributeError:“ int”对象没有属性“ isalpha”

时间:2019-02-18 05:42:36

标签: python client-server caesar-cipher

我正在寻找使用客户端/服务器在python中创建Caesar的Cipher函数的功能。客户端发送带有密钥的消息,然后服务器对其进行加密。 服务器代码:

import socket

def getCaesar(message, key):
    result=""
    for l in message:
        if l.isalpha():
            num = ord(l)
            num += key

            if l.isupper():
                if num > ord('Z'):
                    num -= 26
                elif num < ord('A'):
                    num += 26

            elif l.islower():
                if num > ord('z'):
                    num -= 26
                elif num < ord('a'):
                    num += 26

            result += chr(num)
        else:
            result += l
return result    

serverSock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host=socket.gethostname()
port=4000

serverSock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

serverSock.bind((host,port))
serverSock.listen(5)
print("Listenting for requests")
while True:
    s,addr=serverSock.accept()
    print("Got connection from ",addr)
    print("Receiving...")

    message=s.recv(1024)
    key=s.recv(1024)

    resp=getCaesar(message, key)
    print('Ciphertext: ')
    print(resp)

serverSock.close()

不断被调出的行是第6行:'如果l isalpha():'并给我错误: AttributeError:“ int”对象没有属性“ isalpha”。 这个错误是什么意思?

客户端程序:

import socket

def getMessage():
    print('Enter your message:')
    return input()

def getKey():
    key = 0
    while True:
        print('Enter the key number (1-%s)' % (26))
        key = int(input())
        if (key >= 1 and key <= 26):
            return key

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host=socket.gethostname()
port=4000
s.connect((host,port))


message = getMessage()
key = getKey()

message=message.encode()


s.send(message)
s.send(bytes(key))
cipher= s.recv(1024)

print('Ciphertext: ')
print(cipher)
s.close()

1 个答案:

答案 0 :(得分:3)

在python 3中,socket recv返回一个不变的序列bytes。每个元素的类型为int,范围为[0,255]。 isalphastr的一种方法,而不是int的一种方法。

如果要将服务器响应视为字符串,则可以解码字节。

string = response.decode('utf-8')

for c in string:
    if c.isalpha():
        [...]