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

问题描述 投票:2回答:1

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

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(message,key)出现此错误:

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()
python client-server
1个回答
0
投票

请参阅help(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)可能不会按照您预期的方式工作:它只发送messagekey被解释为标志,而不是messagekey。尝试分别发送messagekey。并且也不要忘记recv他们分开。

© www.soinside.com 2019 - 2024. All rights reserved.