好的,我正在尝试通过SSL套接字连接使服务器和客户端之间实现双向通信。我觉得最好的方法是在每个系统中实现两个线程,分别作为服务端和客户端。但是,当我实现这段代码时(显然在另一个服务器/客户端中使用相反对应的端口):
#secserv.py
import socket
from OpenSSL import SSL
import threading
import time
class SecureIn(threading.Thread):
context = SSL.Context(SSL.SSLv23_METHOD)
context.use_privatekey_file('key')
context.use_certificate_file('cert')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s = SSL.Connection(context, s)
s.bind(('', 5570))
def run(self):
while True:
self.s.listen(5)
(connection, address) = self.s.accept()
print repr(connection.recv(5570))
class SecureOut(threading.Thread):
time.sleep(6)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 12345))
sslSocket = socket.ssl(s)
print repr(sslSocket.server())
print repr(sslSocket.issuer())
def run(self):
sslSocket.write('Hello secure socket\n')
s.close()
si = SecureIn()
si.start()
time.sleep(6)
so = SecureOut()
so.start()
I get this error:
Traceback (most recent call last):
File "secserv.py", line 25, in <module>
class SecureOut(threading.Thread):
File "secserv.py", line 28, in SecureOut
s.connect(('localhost', 12345))
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 111] Connection refused
另外,我尝试过让独立的服务器向所有客户端发送广播消息。我搜索了很多资料,但似乎只有在使用常规套接字时才能找到可行的方法来实现SSL套接字广播。当我尝试使用s.write()
或s.sendall()
时,会出现以下错误:
Traceback (most recent call last):
File "secserv.py", line 19, in <module>
s.write('hello client\n')
OpenSSL.SSL.Error: [('SSL routines', 'SSL_write', 'uninitialized')]
从这段代码开始:
import socket
from OpenSSL import SSL
context = SSL.Context(SSL.SSLv23_METHOD)
context.use_privatekey_file('key')
context.use_certificate_file('cert')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s = SSL.Connection(context, s)
s.bind(('', 12345))
while True:
s.listen(5)
(connection, address) = s.accept()
print repr(connection.recv(12345))
#This could also be s.sendall()
s.write('hello client\n')
请帮助我 StackOverFlow,你是我的唯一希望。我知道这应该很简单,但我的大脑已经紧张到无法思考了。
同时,我对Python还比较新手,因此有可能是它的操作方式或类的加载等方面有些地方我还不懂。
编辑:好吧,我知道这个代码很糟糕。它不是一个要上市销售的产品,它永远不会在生产环境中运行,这只是我尝试让一个概念运作起来,那就是:通过Python SSL连接使服务器和客户端相互发送消息。
我知道这是可怕的代码,但我只是想知道如何让服务器发送一条回复消息,因为每当我尝试时,都会得到最后的错误提示。
while True:
会在另一个线程运行时继续运行。而且,与此同时运行的另一个版本将是相反的,也就是说,在端口12345上设置服务器并等待连接,然后尝试在5570上发送。 - user1585054