本記事(記事カラム)には広告が含まれています。

UDPでデータを送信|Python 練習 12

人気ブログランキングテキスト
記事内に広告が含まれています。
人気ブログランキングテキスト

UDPでデータを送信します。自宅無線LANのローカルで通信します。

PCからスマホに文字データ「abcdefg」を送信します。

DMM FX広告(差し込みタイプ)
広告(PR)|自分の投資スタイルを見つける。※タップで開閉
広告(PR)

DMM FXは、「最初の一歩を踏み出す場」として選ばれることがある

口座を開いてみた。取引してみた。思ったよりも難しかった。──そんな経験が、投資との距離感を知るきっかけになることもあります。


サービスを通じて、自分の投資スタイルを見つける。それは、確信ではなくても構いません。「試してみた」という実感が、次の選択の材料になることもあるからです。


DMM FXに関する詳細は、以下の広告(PR)リンクをご覧いただけます。


👇こちらは広告(PR)リンクバナーです

DMMFX

人気ブログランキングテキスト

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 → IPv4
  • SOCK_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)

スマホ側 コードの解説

全体の流れ

  1. UDP ソケットを作る
  2. 自分の PC のポート 5000 を開けて待ち受ける
  3. 誰かが送ってきた UDP パケットを受信
  4. データと送信元(IP, ポート)を表示する

コードの分解と解説

1. ソケットライブラリを読み込む

import socket

ネットワーク通信の基本機能を使うための標準ライブラリ。

2. UDP ソケットを作る

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  • AF_INET → IPv4
  • SOCK_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つ

  1. data → 受信したバイト列
  2. 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」が表示されます。

スマホ側(受信)画面

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

もしも


人気ブログランキングバナー

人気ブログランキング

人気ブログランキングテキスト