2012-09-27 11 views
6

安定したインターフェイスとクリーナーインターフェイスを実現するために、未処理のTCPソケットをZeroMQに移植するPythonコードを移植しています。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)でテストすると、うまく動作しているようです。

Python 2.7が重要な場合(ユニコードなど)を使用する。

+0

出力はありません。未処理のネットワークトラフィックを調べていますが、探しているのはそれですか? –

+1

zeromqはソケット上でマーシャリングする独自のデータを使用します。あなたがパケットを盗聴するなら、それらは全く同じである必要はありません –

+0

@BartekBanachewicz - 本当にありがとう、ありがとう。ちょうど私の答えに注目してください。 –

答えて

4

ああ。ワオ。私がテストしていたリモートサーバは、ZMQ接続ではなく、生のTCP接続を期待していました。

もちろん、ZMQはメッセージを転送できませんでしたが、接続を正常にネゴシエートしませんでした。私がローカルでテストしたところ、ダミーのZMQサーバーでテストしていたので、うまくいきました。

もし私がサーバーコードを掲示していたら、それが問題であることがすぐに分かりました。

いずれにしても、誤ったアラームをおかけして申し訳ありません。

関連する問題