6

安定性を高め、インターフェイスをすっきりさせるために、生のTCPソケットを使用するPythonコードをZeroMQに移植しています。

すぐに、生のバイトの単一パケットが期待どおりに送信されないことがわかります。

rawソケットの場合:

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))
sock.send('\x00\x01\x02 and some more raw bytes')

これは現在機能しているコードです。これは、ZeroMQを使用した同じコードです。

import zmq
context = zmq.Context()
sock = context.socket(zmq.REQ)  # this connection utilizes REQ/REP
sock.connect('tcp://{0}:{1}'.format(HOST, PORT))
sock.send('\x00\x01\x02 and some more raw bytes')

しかし、私がネットを通過するパケットを検査するとき、それらは間違いなく私が期待しているものではありません。ここで何が欠けていますか?

また、ダミーサーバーを使用してループバックインターフェイス()でこのコードをテストする127.0.0.1と、問題なく動作するようです。

重要な場合はPython2.7を使用します(Unicodeなど)。

4

1 に答える 1

4

おー。わお。テストの大きな欠陥を見落としました。テストしていたリモートサーバーは、ZMQ接続ではなく生のTCP接続を期待していました。

もちろん、ZMQはメッセージを転送できず、接続のネゴシエーションも正常に行われませんでした。ローカルでテストしたときは、ダミーのZMQサーバーでテストしていたので、正常に機能しました。

サーバーコードを投稿していたとしたら、それが問題であることがすぐにわかりました。

いずれにせよ、誤警報でごめんなさい。

于 2012-09-27T13:50:07.023 に答える