Pythonのselectモジュールで構築された単純なスクリプトを使用して、ソケットサーバーとの通信をテストしています。正常に動作します-サーバーから応答を受け取ります-送信した要求が応答の最初の行にエコーされているように見えることを除いて(以下のコマンドラインの例を参照)。サーバープロバイダーは、これはリクエストをエコーしているのではないと言っています-リクエストを送信するときに何をしなかったのですか?(どこかでバッファをフラッシュしますか?)
select_client.py
Prompt=">>>"
def loop(chan, bufsize):
while True:
r, w, e = select.select([chan, sys.stdin], [], [])
if chan in r:
data=chan.recv(bufsize)
if len(data)==0:
continue
sys.stdout.write(data)
sys.stdout.write("%s " % Prompt)
sys.stdout.flush()
if sys.stdin in r:
data=sys.stdin.readline()
if data=="\n":
break
chan.send(data)
使用例
>>> hello
hello <--------- ECHO!
error:no_version_specified
>>> login:1
login:1 <---------- ...!
error:usage:login:1:username?:passwd?
>>> login:1:foo:bar
login:1:foo:bar
>>> error:incorrect_username_or_password
>>>