socket 使っていきましょう。
Contents
socket通信とは
Socket通信とは複数のコンピュータが、ネットワークを介してデータをやりとるする時に用いる通信規格の一種です。
今お使いのPCをサーバーにして、同PCをクライアントとしローカルホスト接続してみましょう。
サーバー側
まず、サーバー側のスクリプトから起動します。
実行すると、クライアントからのデータ待ち状態になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import socket # ソケット作成>ポートをバインド port_number = 2000 server_socket = socket.socket() server_socket.bind(("", port_number)) print('サーバーはポートNO. {} にバインドされました'.format(port_number)) # リッスン開始 server_socket.listen() print('サーバーはクライアントをリスニング中です') # ここでサーバーは待機状態になる # クライアントからデータが送られてきたら動作開始 # 受信したコネクションデータとアドレスを出力 conn, addr = server_socket.accept() print('クライアントのアドレスを受信しました : ', addr) data = conn.recv(1000) print('クライアントからのデータを受信しました : {}'.format(data.decode())) # きちんとサーバーがデータを受け取ったことをクライアントに返信する conn.sendall('サーバーです。データをしっかり受け取りました'.encode()) # コネクションを閉じる conn.close() print('コネクションは閉じられました') # サーバーソケットを閉じる server_socket.close() print('サーバーソケットは閉じられました') |
出力:
サーバーはポートNO. 2000 にバインドされました
サーバーはクライアントをリスニング中です
クライアント側
クライアント側のスクリプトを実行して、サーバーへデータを送りましょう
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import socket # ソケット作成>サーバーへコネクト port_number = 2000 client_socket = socket.socket() client_socket.connect(("localhost", port_number)) print('サーバーへ接続しました') # データをエンコードして送信 client_socket.sendall("こんにちはサーバーさん。私はクライアントです".encode()) print('サーバーへデータを送信しました') # サーバからの受信確認が返ってくるまで待機 data = client_socket.recv(1000) print('サーバーからの受信確認が返ってきました : ', data.decode()) print() # クライアントソケットを閉じる client_socket.close() print('クライアントソケットを閉じました') |
出力:
サーバーへ接続しました
サーバーへデータを送信しました
サーバー側 再び
サーバー側がクライアントからのデータを受け取りました。
直後に、クライアントに対して受信の通知をします。
出力:
クライアントのアドレスを受信しました : (‘127.0.0.1’, 52256)
クライアントからのデータを受信しました : こんにちはサーバーさん。私はクライアントです
コネクションは閉じられました
サーバーソケットは閉じられました
クライアント側 再び
サーバーから送られてきた受信の通知を受け取りました。
出力:
サーバーからの受信確認が返ってきました : サーバーです。データをしっかり受け取りました
クライアントソケットを閉じました
課題
このスクリプトでは、送受信がシーケンスになっており厳密には同時ではありません。
同時にする仕組みとして、マルチスレッディングというのがありますので、次回やってみましょう。
The following two tabs change content below.
Keita N
最新記事 by Keita N (全て見る)
- 2024/1/13 ビットコインETFの取引開始:新たな時代の幕開け - 2024年1月13日
- 2024/1/5 日本ビジネスにおける変革の必要性とその方向性 - 2024年1月6日
- 2024/1/3 アメリカ債権ETFの見通しと最新動向 - 2024年1月3日