Я пытаюсь создать зашифрованное приложение чата с использованием алгоритма RSA в python, но я получаю сообщения об ошибках.Я не могу найти ошибки в коде, и система чата не работает вообще.Client.py завершается с отображением этой ошибки
Файл "client.py", строка 17, в
server_string = server.recv(1024)
OSError: [Errno 107] Transport endpoint is not connected
Коды:
server.pyis:
import socket
from Crypto.PublicKey import RSA
from Crypto import Random
#Generate private and public keys
random_generator = Random.new().read
private_key = RSA.generate(1024, random_generator)
public_key = private_key.publickey()
#Declartion
mysocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostbyname(socket.getfqdn())
port = 8888
encrypt_str = "encrypted_message="
if host == "127.0.1.1":
import commands
host = commands.getoutput("hostname -I")
print("host = " + host)
#Prevent socket.error: [Errno 98] Address already in use
mysocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
mysocket.bind((host, port))
mysocket.listen(5)
c, addr = mysocket._accept()
while True:
#Wait until data is received.
data = c.recv(1024)
data = data.replace("\r\n", '') #remove new line character
if data == "Client: OK":
c.send("public_key=" + public_key.exportKey() + "\n")
print("Public key sent to client.")
elif encrypt_str in data: #Reveive encrypted message and decrypt it.
data = data.replace(encrypt_str, '')
print("Received:\nEncrypted message = "+str(data))
encrypted = eval(data)
decrypted = private_key.decrypt(encrypted)
c.send("Server: OK")
print("Decrypted message = " + decrypted)
elif data == "Quit": break
#Server to stop
c.send("Server stopped\n")
print("Server stopped")
c.close()
client.py is
import socket
from Crypto.PublicKey import RSA
import sys
import os
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "127.0.0.1"
port = 7777
server.bind(("my_IP_addr_goes_here", 8880))
#data= "Client: OK"
#Tell server that connection is OK
#server.sendall("Client : OK")
#Receive public key string from server
server_string = server.recv(1024)
#Remove extra characters
server_string = server_string.replace("public_key=", '')
server_string = server_string.replace("\r\n", '')
#Convert string to key
server_public_key = RSA.importKey(server_string)
#Encrypt message and send to server
message = "This is my secret message."
encrypted = server_public_key.encrypt(message, 32)
server.sendall("encrypted_message="+str(encrypted))
#Server's response
server_response = server.recv(1024)
server_response = server_response.replace("\r\n", '')
if server_response == "Server: OK":
print("Server decrypted message successfully")
#Tell server to finish connection
server.sendall("Quit")
print(server.recv(1024)) #Quit server response
server.close()
Ошибки: Серверный скрипт запущен, но когда я завершаю скрипт, он показывает
Дляserver.py: ^ CTraceback (последний вызов был последним):
File "server.py", line 28, in <module>
c, addr = mysocket._accept()
KeyboardInterrupt
Для client.py: файл "client.py", строка 17, в
server_string = server.recv(1024)
OSError: [Errno 107] Transport endpoint is not connected