Frage

Ich habe einen Socket-Server, die ich SSL zu bewegen über auf Python versuchen 2.5, aber ich habe in einen Baumstumpf mit pyOpenSSL laufen. Ich kann keine gut Tutorials zur Verwendung von ihm finden, so dass ich Betrieb weitgehend auf Vermutungen.

Hier ist, wie mein Server einrichtet die Fassung:

ctx = SSL.Context(SSL.SSLv23_METHOD)
ctx.use_privatekey_file ("mykey.pem")
ctx.use_certificate_file("mycert.pem")
sock = SSL.Connection(ctx, socket.socket(socket.AF_INET, socket.SOCK_STREAM))
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
addr = ('', int(8081))
sock.bind(addr)
sock.listen(5)

Hier ist, wie es akzeptiert Kunden:

sock.setblocking(0)
while True:
  if len(select([sock], [], [], 0.25)[0]):
    client_sock, client_addr = sock.accept()
    client = ClientGen(client_sock)

Und hier ist, wie es sendet / aus den angeschlossenen Steckdosen erhält:

while True:
  (r, w, e) = select.select([sock], [sock], [], 0.25)

  if len(r):
    bytes = sock.recv(1024)
  if len(w):
    n_bytes = sock.send(self.message)

Es ist verdichtet, aber Sie die allgemeine Idee. Das Problem ist, wenn die Sende- / Schleife beginnt zu erhalten, es stirbt sofort, bevor irgendetwas gesendet oder empfangen wurde (das ich sehe, trotzdem kann):

Traceback (most recent call last):
  File "ClientGen.py", line 50, in networkLoop
    n_bytes = sock.send(self.message
WantReadError

Die Beschreibung der Anleitung des ‚WantReadError‘ ist sehr vage, sagt, es von überall kommen kann. Was mache ich falsch?

War es hilfreich?

Lösung

Manchmal, um die Anwendung Bytes einer SSL-Verbindung zu senden, müssen Sie in der Lage sein, mehr Bytes aus der Verbindung zuerst zu lesen. WantReadError ist, wie dieser Fall angezeigt wird. Das einzige, was Sie falsch gemacht sind, ist, dass Sie nicht die WantReadError Handhabung und dann warten, bis select zeigt an, dass die Steckdose lesbar , bevor Sie send versuchen Aufruf erneut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top