テストに使用するソケット ユーティリティのコレクションで使用するために、次の関数を作成しました。(それが重要な場合は、Python 2.7.3 を使用します。)selectライブラリをライブラリに取り込んだ主な理由は、応答を永遠に待つのではなく、タイムアウトを実装できるようにするためでした。私が見つけた問題は.recv()、ソケットのメソッドの最大サイズとして 64K を使用しているにもかかわらず、応答が 2048 文字で切り捨てられていることです。この切り捨ては、私が関与する前には起こりませんでしたselect。最大サイズをより高く設定すると、64K を喜んで通過し、さらにそれ以上になりました。
いくつかのオンライン リソースをselect調べたところ、受信したデータのサイズに関するこの明らかな上限に関する情報が見つかりました。つまり、それを変更する方法は言うまでもなく、それが存在するという情報はありません。この 2K の制限を克服する方法を誰か教えてもらえますか?
ソケットのインポート、選択
最大サイズ = 65535
タイムアウト = 10
def transientConnect (ホスト、ポート、sendData):
エラー、応答 = False、''
試す:
sendSocket = socket.socket()
sendSocket.connect((ホスト,ポート))
sendSocket.send(sendData)
gotData = select.select([sendSocket],[],[],TIMEOUT)
if (gotData[0]):
応答 = sendSocket.recv(MAXSIZE)
そうしないと:
エラー = 真
response = '*** タイムアウト ***\nホストからの応答がありません。'
sendSocket.close()
例外、errText を除く:
error,response = True,'*** ソケット エラー ***\n'+str(errText)
return (エラー、応答)