
概要 📖 – TCP 通信でデータ送受信
TCP/IP DATは、TCP 接続でデータをストリームとして送受信し、受信内容をテーブルとして出力する DATです。クライアント / サーバーの役割選択、受信データの行分割形式の指定、受信ごとに Python を発火させるコールバックまで備えており、TCP を介した外部システム連携の基盤として使われます。
主な用途 🎯
- TCP 接続でのデータ送受信(信頼性の高いストリーム通信で外部アプリやデバイスと文字列・バイト列をやり取り)
- クライアント / サーバーの役割切替(同じ DAT を接続を待ち受けるサーバーにも、接続しに行くクライアントにも設定可能)
- 受信データのテーブル化と解析(受信内容を 1 バイトずつ・1 行ずつ・1 メッセージずつのいずれかの形式で行として取り込み)
- 受信ごとの Python 処理発火(メッセージ受信のたびに Callbacks DAT のスクリプトを実行して動的に処理)
- 外部システムとの双方向連携(センサー機器・制御ソフト・自作サーバーとの常設接続による値の交換)
データフロー 🔄
入力: TCP 接続経由のストリームデータ(クライアント / サーバーとして接続)
↓
受信データの解析(Row/ Callback Formatに応じた行分割)
↓
コールバック発火(Callbacks DATでメッセージごとに Python 実行)
↓
出力: テーブル化された受信データ + 送受信履歴
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
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 from が On Panel Change / Specified Component のときに参照される COMP のパス:
- From Operator パス:
From Operator(実行元 COMP) —Execute fromがOn 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 Extension が Custom Extension のときに適用される拡張子:
- Custom Extension 文字列:
Edit/View Extensionがcustomのときに使用される任意のファイル拡張子
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 で内容を解析します。
Connection ModeをThis Operator is Serverに設定Portに待ち受けポート番号を指定し、Activeを On にするRow/ Callback FormatをOne Per Lineにして行単位で受信Callbacks DATを割り当て、受信メッセージごとに Python で内容を処理
Example 2: クライアントで接続 🔌
TCP/IP DAT (Client) → 外部サーバー → 応答受信
TCP/IP DAT をクライアントモードにして外部サーバーへ接続し、コマンドを送ってその応答を受信する双方向通信のフロー。制御ソフトや自作サーバーとの常設接続に向きます。
Connection ModeをThis Operator is Clientに設定Network Addressにサーバーの IP、Portに接続先ポートを指定Activeを On にして接続を確立- 受信応答が
Row/ Callback Formatに従ってテーブルへ追加されることを確認
Example 3: バイト単位で解析 🔣
外部機器 → TCP/IP DAT (One For All Received Data + Bytes Column) → Python 組み立て
独自のバイナリプロトコルを使う機器との通信で、受信した raw bytes を取りこぼさずに取り込み、複数回の読み取りを Python で 1 メッセージに組み立てて解析するフロー。
Row/ Callback FormatをOne For All Received Dataに設定Bytes Columnを On にして受信した raw bytes を別カラムへ出力Callbacks DAT内で複数回の読み取り内容を 1 つの完全なメッセージに組み立てて解析- 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 🎯
- 前処理: Table DAT、Select DAT
- 後処理: Convert DAT、DAT Execute DAT、Null 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 AddressとPortがサーバーの待ち受け設定と一致しているか確認 - ファイアウォールが該当ポートをブロックしていないか確認 (サーバー側マシンの設定も含む)
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 にして余計な列を減らす
参考資料 📚
その他 🔗
- TouchDesigner Wiki — DAT 概要
- TouchDesigner Wiki — Category:DATs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

