現在、Python でチャット サーバーを開発しています。テスト用に作ったチャットサーバーとダミークライアントにpyOpenSSLを適用中です。しかし、ダミークライアントからサーバーにテキストメッセージと写真ファイルを送信するたびに、pyOpenSSL は重大なエラーを返すため、以下のように pyOpenSSL の使用をやめる必要があります。
send_text_message() : exception : [Errno 1] _ssl.c:1309: error:1409F07F:SSL routines:SSL3_WRITE_PENDING:bad write retry
send_text_message() : exception : [Errno 1] _ssl.c:1309: error:1409F07F:SSL routines:SSL3_WRITE_PENDING:bad write retry
send_text_message() : exception : [Errno 1] _ssl.c:1309: error:1409F07F:SSL routines:SSL3_WRITE_PENDING:bad write retry
send_text_message() : exception : [Errno 1] _ssl.c:1309: error:1409F07F:SSL routines:SSL3_WRITE_PENDING:bad write retry
send_text_message() : exception : [Errno 1] _ssl.c:1309: error:1409F07F:SSL routines:SSL3_WRITE_PENDING:bad write retry
send_text_message() : exception : [Errno 1] _ssl.c:1309: error:1409F07F:SSL routines:SSL3_WRITE_PENDING:bad write retry
send_text_message() : exception : [Errno 1] _ssl.c:1309: error:1409F07F:SSL routines:SSL3_WRITE_PENDING:bad write retry
エラーの解決方法を教えていただけないでしょうか。ダミークライアントを停止させるエラーがもう 1 つあります。
[client1|chatting1A] socket closed : device_id : client1, client_chatting_id : chatting1A, error : [Errno 10053]
Exception in thread Thread-8:
Traceback (most recent call last):
File "C:\Python27\lib\threading.py", line 810, in __bootstrap_inner
self.run()
File "C:\Python27\lib\threading.py", line 1082, in run
self.function(*self.args, **self.kwargs)
File "D:\temp\uTok1\uTokSocketServer\com\rurusoft\utok\DummyClient.py", line 97, in send_photo_message
sock.write(message)
File "C:\Python27\lib\ssl.py", line 172, in write
return self._sslobj.write(data)
error: [Errno 10054]
pyOpenSSL がなければ、ダミーのクライアントとサーバーはうまく機能します。pyOpenSSL を適用すると、予期しない問題が発生します :(. 問題が発生した場合、または問題の解決策がある場合は、お知らせください. .... エラーの解決策がない場合は、OpenSSL を使用しない他の代替手段を見つけたいと思います.または、マシン間で転送されるチャット メッセージと個人ファイルを暗号化/復号化できる代替手段を知っていますか?
データを書き込む(送信する)前に、送信するデータをローカル変数に格納しましたが、毎回エラーが発生します。
json_encoded = json.dumps(data)
while True:
try:
sock.write(json_encoded)
break
except Exception, e:
Log.print_log(self.LOG_TAG, 'send_text_message() : exception : %s' % (e))
time.sleep(0.05)
解決済み : @David Schwartz がコメントしたように、次のコードは上位の問題を解決しました。
import StringIO
...
io = StringIO.StringIO()
io.write(json.dumps(data))
buffer = io.getvalue()
while True:
try:
sock.write(buffer)
break
...