こんにちは、コンスキです。
今回は2台のパソコン間で通信を行う手順について説明します。
1台がMacOSのパソコン、もう1台がWindowsのパソコンという条件で通信を行います。
1台のパソコンにおけるソケット通信
まずは、1台のパソコンで行うソケット通信の手順を確認します。
この手順をすでに知っている方はこちらに飛んで下さい。
2台で行うソケット通信では、この手順が少し変わるだけです。
1.次の2つのファイルを作成します。
1つ目:サーバー側のスクリプト
# coding: utf-8
import socket
class Server:
def __init__(self):
self.ip = "127.0.0.1"
self.port = 7700
self.socket_make(self.ip, self.port)
def socket_make(self, ip, port):
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.s.bind((ip, port))
self.s.listen(1)
while True:
print("Waiting connection...")
conn, addr = self.s.accept()
print("Connected by {}".format(addr))
data = conn.recv(1024)
if not data:
break
print(data)
conn.send(b"I received")
server = Server()
2つ目:クライアント側のスクリプト
# coding: utf-8
import socket
class Client:
def __init__(self):
self.server_ip = "127.0.0.1"
self.server_port = 7700
self.socket_make(self.server_ip, self.server_port)
def socket_make(self, ip, port):
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.s.connect((ip, port))
self.s.send(b"Hello")
data = self.s.recv(1024)
print(data)
client = Client()
2.サーバー側のスクリプトを実行する。
ここで、サーバー側とクライアント側でスクリプトを実行する順番が重要です。
サーバーとクライアントの通信は、次のような順番で行われます。
- サーバーがクライアントの接続要求を待つ
- クライアントが接続要求をする
- サーバーが接続を受け付ける
- データの送受信を行う
そのため、クライアント側のスクリプトより前に実行する必要があります。
ターミナルやコマンドプロンプトなどのコマンドラインツールを起動して次のようにサーバー側のスクリプトを実行します。
cd スクリプトがあるディレクトリのパス
python3 スクリプトのファイル名
実行すると、コマンドラインツールに「Waiting connection…」と表示されると思います。
3.クライアントが側のスクリプトを実行する。
先ほど起動したコマンドラインツールに加えてもう1つコマンドラインツールを起動します。
サーバー側スクリプト同じように実行します。
cd スクリプトがあるディレクトリのパス
python3 スクリプトのファイル名
実行すると次のように表示されると思います。
サーバー側のコマンドライン ▶︎ b’Hello’
クライアント側のコマンドライン ▶︎ b’I received’
2台のパソコン間でソケット通信する
サーバー側とクライアント側のスクリプトにも、7行目でIPアドレスを設定しています。
ここに、2台のパソコンが接続しているWi-FiのIPアドレスを設定してください。
実行方法は1台のパソコンでやる場合と同じです。
サーバー側のスクリプト ▶︎ クライアント側のスクリプト
の順番で実行します。
Wi-FiのIPアドレス の確認方法
IPアドレスはWindowsのパソコンで確認する方が簡単だと思います。
1.コマンドプロンプトを起動して、次のコマンドを入力します。
ipconfig
「Wireless LAN adapter Wi-Fi」の、IPv4という項目書かれている数字がIPアドレスです。
「数字.数字.数字.数字」という形式になっていると思います。
2.このIPアドレスでスクリプト7行目の「127.0.0.1」を書き換えてください。
コメント