Python:WinError 10045:引用的对象类型不支持尝试的操作

时间:2019-02-17 21:53:51

标签: python client-server

我正在使用客户端/服务器程序创建凯撒密码程序。客户端将输入一条消息和一个密钥,服务器将返回密文。这是我的服务器代码:

import socket

def getCaesar(message, key):
    cipher = "" 

    for i in message: 
        char = message[i] 

        # Encrypt uppercase characters 
        if (char.isupper()): 
            cipher += chr((ord(char) + key-65) % 26 + 65) 

        # Encrypt lowercase characters 
        else: 
            cipher += chr((ord(char) + key - 97) % 26 + 97) 

    return cipher 

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

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

s.bind((host,port))
s.listen(5)
print("Listenting for requests")

while True:
    s,addr=s.accept()
    print("Got connection from ",addr)
    print("Receiving...")

    message,key=s.recv(1024)
    resp=getCaesar(message, key)

    s.send(resp)
s.close()

错误消息将此行调出:s.send(消息,密钥),出现以下错误:

OSError:[WinError 10045]所引用的对象类型不支持尝试的操作。这个错误是什么意思?

我的客户代码:

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, key)
cipher= s.recv(1024)

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

1 个答案:

答案 0 :(得分:0)

查看帮助(socket.send):

Help on built-in function send:

send(...) method of socket.socket instance
    send(data[, flags]) -> count

    Send a data string to the socket.  For the optional flags
    argument, see the Unix manual.  Return the number of bytes
    sent; this may be less than len(data) if the network is busy.

因此,行s.send(message, key)可能无法按您预期的方式工作:它仅发送message并将key解释为标志,而不同时发送message和{{1 }}。尝试分别发送keymessage。而且也不要忘记分别key