0

サーバーでこのコマンドを使用して、クライアントからサーバーに「こんにちは」というメッセージを送信します

    #Send some data to remote server
    message = 'hello'

    try :

    s.send(message)
    print 'data sent successfully'
    except socket.error:
    #Send failed
    print 'Send failed'

サーバー側で、このメッセージがサーバー側で作成されたディクショナリのキーとして存在するかどうかを確認したいと思います。

    msg=c.recvfrom(1024)

     if msg in data2.keys():
 print("key for this msg exists", msg)
     else:
     print("no such key exists",msg)

さて、問題は、そのようなキーが存在しないと常に言うことです。クライアントから取得したメッセージをサーバー側で出力すると、次のようになります。

   ('hello', None)

こんにちはと一緒に None を与える理由がわかりません。

このため、辞書で一致することさえありません。どこが間違っているのか教えてください。

4

2 に答える 2

2

ソケット状態のドキュメントとして:戻り値はペア (文字列、アドレス) です。ここで、文字列は受信したデータを表す文字列であり、アドレスはデータを送信するソケットのアドレスです。

したがって、あなた('hello', None)はこのペアであり、そこからメッセージ文字列を選択して辞書で検索する場合は、を使用する必要がありますmsg[0]

于 2013-06-23T00:34:20.180 に答える
1

ドキュメントを見るsocket.recvfrom()と、タプルを返すことがわかります。データ部分だけが必要な場合は、 を呼び出すだけの方がよいでしょうsocket.recv()

于 2013-06-23T00:34:51.480 に答える