Python ソケット通信で遊ぶ

ソケット通信ってなんだ?やってみないとわからないということで
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分ぐらい)に使えない状態になりました。

コメント

タイトルとURLをコピーしました