我正在使用客户端/服务器程序创建凯撒密码程序。客户端将输入一条消息和一个密钥,服务器将返回密文。这是我的服务器代码:
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()
答案 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 }}。尝试分别发送key
和message
。而且也不要忘记分别key
。