0

名前付きタプルの配列をソケットで送信する必要があります。

namedtuples の配列を作成するには、次のように使用します。

listaPeers=[]
for i in range(200):
     ipPuerto=collections.namedtuple('ipPuerto', 'ip, puerto')
     ipPuerto.ip="121.231.334.22"
     ipPuerto.puerto="8988"
     listaPeers.append(ipPuerto)

いっぱいになったので、「listaPeers [200]」をパックする必要があります

どうすればできますか?

何かのようなもの?:

packedData = struct.pack('XXXX',listaPeers)
4

3 に答える 3

1

まず、namedtuple を間違って使用しています。次のようになります。

 # ipPuerto is a type
 ipPuerto=collections.namedtuple('ipPuerto', 'ip, puerto')

 # theTuple is a tuple object
 theTuple = ipPuerto("121.231.334.22", "8988")

パッキングに関しては、相手側で何を使用するかによって異なります。データが Python によって読み取られる場合は、Pickle モジュールを使用できます。

import cPickle as Pickle
pickledTuple = Pickle.dumps(theTuple)

それらの配列全体を一度にピクルすることができます。

于 2012-04-12T17:39:45.713 に答える
0

サーバー プロセスが信頼できないクライアントから pickle 化されたデータを受信して​​いる場合、サーバー プロセスで pickle が安全でないと見なされる ISTR。

レコードとフィールドの区切り文字 (おそらく \0 と \001 または \376 と \377) を考え出す必要があるかもしれません。次に、メッセージをまとめることは、スペースと改行で区切られたレコードとフィールドに分割されたテキスト ファイルのようなものです。または、通常のデータにこれらが含まれていない場合は、スペースと改行を使用できます。

このモジュールは、ソケットベースのプロトコルでデータをフレーミングするのに非常に価値があると 思います: http://stromberg.dnsalias.org/~strombrg/bufsock.html次の 10 文字」 - IP の集約やパケットの分割の複雑さについて心配する必要はありません。

于 2012-04-12T18:08:23.420 に答える