TCP/IP DAT 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

TCP/IP DAT の TCP 通信を示す図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – TCP 通信でデータ送受信

TCP/IP DATは、TCP 接続でデータをストリームとして送受信し、受信内容をテーブルとして出力する DATです。クライアント / サーバーの役割選択、受信データの行分割形式の指定、受信ごとに Python を発火させるコールバックまで備えており、TCP を介した外部システム連携の基盤として使われます。

主な用途 🎯

  • TCP 接続でのデータ送受信(信頼性の高いストリーム通信で外部アプリやデバイスと文字列・バイト列をやり取り)
  • クライアント / サーバーの役割切替(同じ DAT を接続を待ち受けるサーバーにも、接続しに行くクライアントにも設定可能)
  • 受信データのテーブル化と解析(受信内容を 1 バイトずつ・1 行ずつ・1 メッセージずつのいずれかの形式で行として取り込み)
  • 受信ごとの Python 処理発火(メッセージ受信のたびに Callbacks DAT のスクリプトを実行して動的に処理)
  • 外部システムとの双方向連携(センサー機器・制御ソフト・自作サーバーとの常設接続による値の交換)

データフロー 🔄

入力: TCP 接続経由のストリームデータ(クライアント / サーバーとして接続)

受信データの解析(Row/ Callback Format に応じた行分割)

コールバック発火(Callbacks DAT でメッセージごとに Python 実行)

出力: テーブル化された受信データ + 送受信履歴

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

Connect Page 📋

通信モード .mode 🔁

Connection Mode (通信モード) — この DAT がクライアントとして通信するかサーバーとして通信するかを指定します。

項目 内部名 説明
This Operator is Client .client この DAT をクライアントとして動作させ、サーバーへ接続しに行く
This Operator is Server .server この DAT をサーバーとして動作させ、クライアントからの接続を待ち受ける

接続と宛先 🌐

Network Address .address 📡
Network Address (宛先アドレス) — このノードがクライアントとして通信する場合に、接続先となるサーバーの IP アドレスを指定します。
サーバーとして動作する場合は接続を受け入れる側になるため、この欄での宛先指定は不要です。

Port .port 🔌
Port (ポート) — 待ち受ける、または接続しに行くネットワークポート番号を指定します。
サーバーなら待ち受けるポート、クライアントなら接続先のポートを意味し、通信相手と同じポート番号に揃えます。

Shared Connection .shared 🔗
Shared Connection (接続の共有) — 同じネットワークプロトコルを使う他のネットワーク DAT と接続を共有します。

Active .active
Active (接続の有効化) — このチェックボックスで接続を有効にします。
Off にすると接続が無効になり、送受信処理が停止します。

受信データ形式 .format 📥

Row/ Callback Format (行分割の形式) — 受信データをどのようにテーブルへ解析するかを決定します。

項目 内部名 説明
One Per Byte .perbyte 受信した 1 バイトごとにテーブルへ 1 行を追加
One Per Line .perline 受信した 1 行ごとに 1 行を追加 (行末は \n / \r / null 文字で区切られる。これらの文字を受信するまでメッセージはログされない)
One For All Received Data .all 受信メッセージごとに 1 行を追加。TCP/IP はストリーム型プロトコルのため「メッセージ」の終端は任意で、ソケットからの最後の読み取り内容となる。独自フォーマットを読む場合は複数回の読み取りを Python で 1 メッセージに組み立てる必要がある

Received Data Page 📨

Callbacks .callbacks 🐍

Callbacks DAT .callbacks 📜
Callbacks DAT (コールバック) — メッセージを受信するたびに 1 回スクリプトを実行する Callbacks DAT のパスを指定します。

実行スコープ .executeloc 📍

Execute from (実行場所) — スクリプトを実行する場所を決定するメニューです。

項目 内部名 説明
Current Node .current 現在の Node 位置からスクリプトを実行
Specified Operator .specified From Operator パラメータで指定した OP からスクリプトを実行
On Panel Change .panel From Operator で指定した COMP のパネル状態変化をトリガーにスクリプトを実行

From Operator .fromop 🔗

Execute fromOn Panel Change / Specified Component のときに参照される COMP のパス:

  • From Operator パス: From Operator (実行元 COMP) — Execute fromOn Panel Change のときに状態変化がスクリプト実行のトリガーとなる COMP です。Specified Component 指定時はスクリプトの実行パスにもなります。

出力行数制御 📏

Clamp Output .clamp 🚧
Clamp Output (行数の上限制御) — DAT はデフォルトで 100 メッセージに制限されますが、これを On にすると無制限を含む任意値に変更できます。

Maximum Lines .maxlines 📐
Maximum Lines (最大行数) — 保持するメッセージ数の上限です。
上限を超えると古いメッセージから順にリストから削除されます。

Clear Output .clear 🗑️
Clear Output (クリア) — ヘッダ行以外の全行を削除します。
スクリプトからクリアする例: opparm -c /serial1 clear

Bytes Column .bytes 🔣
Bytes Column (バイト列の出力) — 各メッセージの raw bytes を別カラムとして出力に追加します。
デバッグ用途や受信バイナリの確認に有用です。


Common Page 🔧

Language .language 📝

DAT が動作するスクリプト言語の決定方法

項目 内部名 説明
Input .input 入力 DAT のスクリプト言語を使用
Node .node この DAT 自身のスクリプト言語を使用

Edit/View Extension .extension 📄

外部エディタに公開するファイル拡張子の選択

項目 内部名 説明
dat .dat 汎用的なファイル拡張子 dat を使用
From Language .language DAT のスクリプト言語に応じた拡張子を自動選択
Custom Extension .custom Custom Extension で指定したカスタム拡張子を使用

Custom Extension .customext 🔤

Edit/View ExtensionCustom Extension のときに適用される拡張子:

  • Custom Extension 文字列: Edit/View Extensioncustom のときに使用される任意のファイル拡張子

Word Wrap .wordwrap 🔁

ノード表示でのワードラップ (折り返し) の有効化

項目 内部名 説明
Input .input 入力 DAT の Word Wrap 設定を継承
On .on Word Wrap を有効化 (ノード上の長い行を折り返し表示)
Off .off Word Wrap を無効化 (折り返さずそのまま表示)

実践アイデア 💡

Example 1: サーバーで受信 📡

外部クライアント → TCP/IP DAT (Server) → Callbacks DAT → 処理

TCP/IP DAT をサーバーモードに設定し、外部アプリや自作クライアントからの接続を待ち受けて受信データをテーブル化するフロー。受信ごとに Callbacks DAT で内容を解析します。

  1. Connection ModeThis Operator is Server に設定
  2. Port に待ち受けポート番号を指定し、Active を On にする
  3. Row/ Callback FormatOne Per Line にして行単位で受信
  4. Callbacks DAT を割り当て、受信メッセージごとに Python で内容を処理

Example 2: クライアントで接続 🔌

TCP/IP DAT (Client) → 外部サーバー → 応答受信

TCP/IP DAT をクライアントモードにして外部サーバーへ接続し、コマンドを送ってその応答を受信する双方向通信のフロー。制御ソフトや自作サーバーとの常設接続に向きます。

  1. Connection ModeThis Operator is Client に設定
  2. Network Address にサーバーの IP、Port に接続先ポートを指定
  3. Active を On にして接続を確立
  4. 受信応答が Row/ Callback Format に従ってテーブルへ追加されることを確認

Example 3: バイト単位で解析 🔣

外部機器 → TCP/IP DAT (One For All Received Data + Bytes Column) → Python 組み立て

独自のバイナリプロトコルを使う機器との通信で、受信した raw bytes を取りこぼさずに取り込み、複数回の読み取りを Python で 1 メッセージに組み立てて解析するフロー。

  1. Row/ Callback FormatOne For All Received Data に設定
  2. Bytes Column を On にして受信した raw bytes を別カラムへ出力
  3. Callbacks DAT 内で複数回の読み取り内容を 1 つの完全なメッセージに組み立てて解析
  4. Convert DAT 等で取り込んだデータを後段で整形

関連オペレータ 🔗

類似機能OP 🔍

  • UDP In DAT — UDP で受信する版。到達保証は不要で低遅延を優先する場合
  • UDP Out DAT — UDP で送信する版。ブロードキャスト的な送出に向く
  • WebSocket DAT — WebSocket でのメッセージ送受信版 (ブラウザ連携向き)

組み合わせ推奨OP 🔄

  • DAT Execute DAT — 受信による行追加をトリガーに Python を発火する定番ペア
  • Convert DAT — 受信したテキストを区切り文字でテーブルに変換して解析
  • Substitute DAT — 受信文字列の不要部分を置換・整形してから処理
  • Table DAT — 送信するコマンドや受信結果をテーブルで管理する用途

前処理・後処理DAT 🎯


Info DAT情報 📊

TCP/IP DAT は Info DAT による詳細情報取得に対応しています (num_rows / num_cols / total_cooks / cook_time 等の共通 DAT Info チャンネルを参照可能)。

DAT 固有情報 📋

  • num_rows: DAT の行数
  • num_cols: DAT の列数
  • type: DAT の型 (table / text)
  • is_table: テーブル形式の場合 1、テキスト形式の場合 0

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間 (ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: 接続が確立できない・つながらない
✅ Solution:

  • Active パラメータが On になっているか確認
  • クライアント側の Network AddressPort がサーバーの待ち受け設定と一致しているか確認
  • ファイアウォールが該当ポートをブロックしていないか確認 (サーバー側マシンの設定も含む)
  • Connection Mode がサーバー / クライアントで正しく対になっているか確認 (両方サーバーでは接続できない)

❌ Problem: 受信データが期待した行に分かれない
✅ Solution:

  • Row/ Callback Format を送信側の区切り方に合わせて選び直す (1 バイト / 1 行 / 全データ)
  • One Per Line 使用時は送信側が \n / \r / null 文字で行を終端しているか確認
  • 独自フォーマットは One For All Received Data + Callbacks DAT で複数読み取りを Python で組み立てる

❌ Problem: 受信履歴が無制限に増えてメモリを圧迫する
✅ Solution:

  • Clamp Output を On にし、Maximum Lines で適切な上限 (例: 200-1000) を設定
  • コールバック内で必要な情報を転記したあと Clear Output で定期的にクリア
  • デバッグが済んだら Bytes Column を Off にして余計な列を減らす

参考資料 📚

その他 🔗

公式リソース 📖

関連記事 🔗

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました