ソケット通信ってなんだ?やってみないとわからないということで
pythonを使用して、サーバとクライアント間での通信を確立してみました。
実施環境
Server(sakuraVPS)
・python 3.6.8
・port番号1234の開放
Client
・python 3.6.8
まずはサンプルコードの紹介(汚かったらごめんなさい。。)
Server側
#server側
import socket
#コネクション確立
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("IPアドレス", 1234))
s.listen(5)
#クライアントのコネクションとアドレスを取得
clientsocket, address = s.accept()
receive = ''
#処理部分
while True:
receive = clientsocket.recv(4096).decode()
if receive == 'bye':
break
print(receive)
clientsocket.send('res:'.encode("UTF-8") + receive.encode("UTF-8"))
clientsocket.close()
クライアント側
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("IPアドレス", 1234))
while True:
line = ''
line = input('>')
if line == 'bye':
s.send(line.encode("UTF-8"))
break
if not line == '':
s.send(line.encode("UTF-8"))
print(s.recv(4098).decode())
s.close()
内容はクライアント側から文字入力すると、
サーバ側から受け取った事をレスポンスしてくる簡単な内容です。
server側を実行してからクライアント側を実行します。
学んだこと
import socket
まずはソケット通信の為のライブラリでsokcetが必要です。
pipでインストールはしなかったのでpython3では標準ライブラリでした。
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#コネクションを仕掛ける側で使用
s.connect(("IPアドレス", 1234))
#コネクションを待つ側
s.bind(("IPアドレス", 1234))
s.listen(5)
・socket.socket( 引数1, 引数2 )
ソケットを作成します。引数には通信方法を指定します。
引数1:IPv4、Pv6の指定(socket.AF_INET:IPv4)
引数2:TCP、UDPの指定(socket.SOCK_STREAM:TCP)
clientsocket, address = s.accept()
・clientsocket , address = s.accept()
clientsocketにクライアントと通信するための情報を格納します。
clientsocketを利用して、サーバ側は送受信を行います。
#クライアント側に送信
clientsocket.send()
#クライアント側から受信
clientsocket.recv()
・send()
括弧内に送信したいデータをセットします。データはバイナリデータでないと送信できないみたいです。
なのでサンプルではencodeを使用しています。
・recv()
括弧内にはサイズを入れます。受信後文字列にするため、decode()を使用しています。
s.close()
・close()
接続を終了する場合は必ずcloseをします。
途中で終了した場合、ソケットが開放されず、一時的(2分ぐらい)に使えない状態になりました。
コメント