Python websocket-clientでバイナリデータの送受信

websocket-clientでWebSocket通信してみました。
Python websocket-clientでBottleフレームワークと通信する

バイナリデータの送受信を試してみます。


バイナリデータの送信



サンプルとして画像のバイナリデータを送信。
確認用にサーバー側でファイルに復元。
クライアントには送信されてきたバイナリデータをそのまま返却してみます。

こちらが参考になりました。
Python websocket client: sending binary content


・app.py


  1. import json
  2. import bottle
  3. import gevent
  4. from bottle.ext.websocket import GeventWebSocketServer
  5. from bottle.ext.websocket import websocket
  6. app = bottle.Bottle()
  7. @app.route('/wsbin', apply=[websocket])
  8. def wsbin(ws):
  9.     while True:
  10.         body = ws.receive()
  11.         if not body:
  12.             break
  13.         
  14.         # 確認用に受信したデータをファイルに出力
  15.         with open('debug_app.jpg', 'wb') as f:
  16.             f.write(body)
  17.         # そのまま送り返す
  18.         ws.send(body)
  19.         
  20. app.run(host='localhost', port=8080, reloader=True, debug=True, server=GeventWebSocketServer)




・client.py


  1. import json
  2. import time
  3. import urllib.request
  4. import urllib.parse
  5. import websocket
  6. url = 'ws://localhost:8080/wsbin'
  7. # 画像データ読み込み
  8. with open('images.jpg', 'rb') as f:
  9.     data = f.read()
  10. ws = websocket.create_connection(url)
  11. # sendではなくsend_binaryでデータ送信
  12. ws.send_binary(data)
  13. body = ws.recv()
  14. # 確認用に受信データをファイルに保存
  15. with open('debug_client.jpg', 'wb') as f:
  16.     f.write(body)
  17. ws.close()




ポイントは、sendではなくsend_binaryでデータ送信する点でしょうか。
受信部分はrecvのまま変更しなくてもOKでした。

適当な画像ファイルimages.jpgを用意して実行してみると、同じ内容の
debug_app.jpg
debug_client.jpg
が出力されることが確認できました。


【参考URL】
Python websocket client: sending binary content
関連記事

コメント

非公開コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
Symfoware まとめ

PR




検索フォーム

月別アーカイブ