Python 3 系を使ったソケット通信


ちょっと Python でソケット通信をやろうと思ったのですが、思った通りに出来ませんでした。やろうと思ったのは次のようなコードでした。

sendall() メソッドには str を渡すとあったので次のようにして実行したのですが、エラーになってしまいました。

import socket
 
my_socket = socket.socket()
my_socket.connect( ( "127.0.0.1", 8080 ) )
my_socket.sendall( "testdata" )
my_socket.close()

詳しい同僚に聞いたところ、Python 3 系では文字列の前に b をつけてバイト列として送る必要があるとのことでした。もし、変数に代入したのであれば encode メソッドを使って送ります。(以下では UTF-8 でエンコードしています)

import socket
 
my_socket = socket.socket()
my_socket.connect( ( "127.0.0.1", 8080 ) )
# 文字列リテラルから
my_socket.sendall( b"testdata" )
# 変数から
data = "testdata"
my_socket.sendall( data.encode( "utf-8" ) )
my_socket.close()