17

Python で単純なクライアントとサーバーのメッセージング プログラムを作成しようとしていますが、「TypeError: 'str' はバッファー インターフェイスをサポートしていません」というエラーが表示され続け、それが何を意味するのかさえわかりません。私は大部分が Python の初心者であり、ネットワークの完全な初心者です。

何らかの理由で文字列データを送信できないと思いますか? この場合、どのように文字列を送信しますか?

参考までに、これのほとんどを取得したサンプル コードは python 2.x 用であり、これを Python 3 で実行しているので、バージョンの移行から解決するのは別の問題だと思います。同じ問題を検索しましたが、同じ修正を自分の状況に適用する方法が実際にはわかりません。

サーバーの最初のコードは次のとおりです。

import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("", 5000))
server_socket.listen(5)

print("TCP Server Waiting for client on port 5000")

while 1:
    client_socket, address = server_socket.accept()
    print("TCP Server received connect from: " + str(address))
    while 1:
        data = input("SEND(Type q or Q to quit):")
        if(data == 'Q' or data == 'q'):
            client_socket.send(data)
            client_socket.close()
            break;
        else:
            client_socket.send(data)
            data = client_socket.recv(512)

        if(data == 'q' or data == 'Q'):
            client_socket.close()
            break;
        else:
            print("Received: " + data)
4

1 に答える 1

54

Python 3 では、バイト文字列と Unicode 文字列が 2 つの異なる型になりました。ソケットは文字列エンコーディングを認識しないため、ユニコード文字列とはわずかに異なるインターフェイスを持つ raw バイト文字列を使用しています。

したがって、バイト文字列として使用する必要がある Unicode 文字列がある場合はいつでも、それを使用する必要がありますencode()。また、バイト文字列がある場合は、decodeそれを通常の (python 2.x) 文字列として使用する必要があります。

Unicode 文字列は、引用符で囲まれた文字列です。バイト文字列はb""囲まれた文字列です

What's new in python 3.0を参照してください。

于 2012-08-02T16:20:16.227 に答える