UDPでデータを送信します。自宅無線LANのローカルで通信します。
PCからスマホに文字データ「abcdefg」を送信します。
PC側コード(送信側)
# 送信側
import socket
TARGET_IP = "192.168.0.235" # ←受信側のIP
TARGET_PORT = 5000
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
message = b"abcdefg"
sock.sendto(message, (TARGET_IP, TARGET_PORT))
print("送信:", message, "→", TARGET_IP, TARGET_PORT
PC側 コードの解説
全体の流れ
この送信プログラムは、 UDP ソケットを作る → メッセージを送る → 終わり という最小構成です。
コードの分解と解説
1. import socket
Python の標準ライブラリ socket を使う宣言。 ネットワーク通信の基本機能が入っています。
2. 送信先の設定
TARGET_IP = "192.168.0.235" # ←受信側のIP
TARGET_PORT = 5000
- TARGET_IP:受信側の IP
- TARGET_PORT:受信側が
bind()して待っているポート番号
UDP は「相手の IP とポート番号が分かれば送れる」仕組みです。
3. ソケットを作る
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
AF_INET→ IPv4SOCK_DGRAM→ UDP を使う
この時点では 送信元ポートは決まっていません。 OS が後で自動的に割り当てます。
4. 送るデータを作る
message = b"abcdefg"
b"..."は バイト列- UDP はバイト列しか送れないので、文字列ではなく bytes が必要
5. UDP パケットを送信
sock.sendto(message, (TARGET_IP, TARGET_PORT))
ここで初めて OS が動き出だします。
- 送信先:
(192.168.0.235, 5000) - 送信元:OS が自動で エフェメラルポート を割り当て (例:54321, 49152, 60000 など)
受信側の addr に毎回違うポート番号が入ります。
6. 送信ログ
print("送信:", message, "→", TARGET_IP, TARGET_PORT)
単なる表示です。
れます。
スマホ側コード(受信側)
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("0.0.0.0", 5000))
print("waiting...")
while True:
data, addr = sock.recvfrom(1024)
print("received:", data.decode(), "from", addr)
スマホ側 コードの解説
全体の流れ
- UDP ソケットを作る
- 自分の PC のポート 5000 を開けて待ち受ける
- 誰かが送ってきた UDP パケットを受信
- データと送信元(IP, ポート)を表示する
コードの分解と解説
1. ソケットライブラリを読み込む
import socket
ネットワーク通信の基本機能を使うための標準ライブラリ。
2. UDP ソケットを作る
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
AF_INET→ IPv4SOCK_DGRAM→ UDP
ここで「UDP 用の受信箱」を作っているイメージ。
3. ポート 5000 を開けて待ち受ける
sock.bind(("0.0.0.0", 5000))
"0.0.0.0"→ 全てのネットワークインターフェースで受信する- LAN
- Wi-Fi
- 仮想 NIC どこから来ても受け取る設定。
5000→ この PC の 受信ポート番号
つまり:
「この PC のポート 5000 に届いた UDP パケットは全部受け取る」
という設定。
4. 待ち受け開始
print("waiting...")
単なる表示。
5. 無限ループで受信し続ける
while True:
data, addr = sock.recvfrom(1024)
recvfrom(1024)→ 最大 1024 バイトの UDP パケットを受信 → ブロッキング(届くまで止まる)
戻り値は 2つ:
data→ 受信したバイト列addr→ 送信元の(IP, ポート番号)のタプル
例:
('192.168.0.245', 55627)
この 55627 が毎回変わるのは、送信側が毎回違うエフェメラルポートを使うため(UDP の仕様)。
6. 受信内容を表示
print("received:", data.decode(), "from", addr)
data.decode()→ バイト列を文字列に変換addr→(送信元IP, 送信元ポート)
表示例:
received: abcdefg from ('192.168.0.245', 55627)
結果
最初にスマホ側を起動。次に、PC側を起動します。PCから送信した「abcdefg」が表示されます。
スマホ側(受信)画面




人気ブログランキング ブログパーツ