2台の異なるPC同士でソケット通信したいのですが、
このときサーバとクライアントのソースコードで通信先を設定すると思います。
サーバ:Raspbian GNU/Linux 9.13 (stretch)、IPアドレス:192.168.0.10
クライアント:Windows 10 21H1、IPアドレス:192.168.0.20
(インターネットにつながってはいますが、0.0.0.0などインターネット経由では通信しない前提。念のため、Windowsのファイアーウォールは無効に。PythonでTCP通信のエラー: [WinError 10061] 対象のコンピューターによって拒否されたため、接続できませんでした。)
一応クライアントの数は複数を予定していますが、まずは1台で検証。
上記2台の ping は通っています。
接続方法としては両PCのLANケーブル(ストレート)を同じハブに通しています。
をひな形として、
サーバ 192.168.0.10 のソースコードを
Python
1import socket 2 3PORT = 50000 4BUFFER_SIZE = 1024 5 6with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: 7 #s.bind(('127.0.0.1', PORT)) # NG 8 #s.bind((socket.gethostname(), PORT)) # NG 9 s.bind(("192.168.0.10", PORT)) # OK 10 s.listen() 11 while True: 12 (connection, client) = s.accept() 13 try: 14 print('Client connected', client) 15 data = connection.recv(BUFFER_SIZE) 16 connection.send(data.upper()) 17 finally: 18 connection.close()
クライアント側 192.168.0.20 のソースコードを
Python
1import socket 2 3PORT = 50000 4BUFFER_SIZE = 1024 5 6with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: 7 s.connect(('192.168.0.10', PORT)) 8 data = input('Please input > ') 9 s.send(data.encode()) 10 print(s.recv(BUFFER_SIZE).decode())
動作結果
サーバ(ラズパイ)のターミナル画面は特に表示なく、
クライアント(windows)側のターミナル画面には
Traceback (most recent call last): File "c:/Users/USER01/Desktop/c.py", line 7, in <module> s.connect(('192.168.0.10', PORT)) ConnectionRefusedError: [WinError 10061] 対象のコンピューターによって拒否されたため、接続できませんでした。
と表示されました。
なぜエラーになったのでしょうか。
そもそも通信先、元の設定方法はこれで合ってますか。
追記
同じPCでは正常に動作しています。
ちなみに、サーバとクライアントを入れ替えてIPアドレス部分を書き換えると、両ターミナルとも何も表示されませんでした。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/08 02:17 編集
2021/06/08 03:30