Python: WinError 10045: 引用的对象类型不支持尝试的操作
Python: WinError 10045: The attempted operation is not supported for the type of object referenced
我正在使用 client/server 程序创建凯撒密码程序。客户端将输入一条消息和一个密钥,服务器将 return 密文。这是我的服务器代码:
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()
查看帮助(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
和 key
。尝试分别发送 message
和 key
。也不要忘记 recv
它们分开。
我正在使用 client/server 程序创建凯撒密码程序。客户端将输入一条消息和一个密钥,服务器将 return 密文。这是我的服务器代码:
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()
查看帮助(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
和 key
。尝试分别发送 message
和 key
。也不要忘记 recv
它们分开。