UDPSocket
UDPSocket クラスを使用すると、UDP パケットの送信と受信が可能になります。 UDP (User Datagram Protocol) は、データを送信するための、実装が簡単なプロトコルです。 これはTCP よりも早くてシンプル(TCP のヘッダーが最低20 バイトであるのに対してUDP はヘッダーがわずか8 バイト)ですが、信頼性のレベルは同じではありません。 これはデータが目的地に迅速に到着する必要のあるアプリケーションに有用です。 ただし、これは配信の検証も、正常に配信されなかったデータの復旧もエラーチェックも行うことはできません。
履歴
| リリース | 内容 |
|---|---|
| 20 R10 | クラスを追加 |
UDPSocket クラスは4D クラスストアから利用可能です。 UDP 接続は、 UDPSocket オブジェクト を返す 4D.UDPSocket.new() 関数を使用することで作成することができます。
標準の4D オブジェクトの refcounting のおかげで、UDPSocket はそれがもう参照されなくなったときに自動的にリリースされます。これはつまりメモリ内にUDPSocket への参照が残っていない状態になったときを意味します。 これ一般的に、例えばメソッド実行の最後にローカル変数が消去されるときに発生します。 結果として、それに関連したリソースは、明示的な終了を必要とせずに適切にクリーンアップされます。 しかしながら、ソケットを"強制的に"終了させたい場合には、Null を代入することで参照を無効化 してください。
UDP ソケットに関連したイベントを記録する4DTCPUDPLog.txt ログファイル を使用すると、デバッグやモニタリングを行うことができます。 記録されるイベントには、データ送信、エラー、接続ライフサイクル情報などが含まれます。
Aynchronous programming
This class supports asynchronous programming in 4D as described in the Asynchronous Execution page.
UDPSocket オブジェクト
UDPSocket オブジェクトは変更不可であり、ストリーム不可です。
UDPSocket オブジェクトは以下のプロパティと関数を提供します:
| errors : Collection ソケットに関連したエラーオブジェクトのコレクション |
| port : Number リッスンするポート番号 |
| .send( data : Blob ; hostName : Text ; remotePort : Integer ) data 引数のデータをhostName で指定したリモートサーバーに、remotePort 引数で指定したポート番号で送信します |
4D.UDPSocket.new()
4D.UDPSocket.new() : 4D.UDPSocket
4D.UDPSocket.new( options : Object ) : 4D.UDPSocket
4D.UDPSocket.new( port : Integer ) : 4D.UDPSocket
4D.UDPSocket.new( port : Integer ; options : Object ) : 4D.UDPSocket
| 引数 | 型 | 説明 | |
|---|---|---|---|
| port | Integer | -> | UDP ソケットに使用されるローカルのポート番号(0 または省略時には使用されていないポートを探して使用) |
| options | Object | -> | ソケットの接続オプション |
| 戻り値 | 4D.UDPSocket | <- | 新規UDPSocket オブジェクト |
説明
4D.UDPSocket.new() 関数は、options 引数のオプションを(あれば)使用して、port 引数(あれば)で指定されたポートまたは未使用のランダムなポートを使用する、新しいUDP ソケットを作成し、4D.UDPSocket オブジェクトを返します。
options 引数
options 引数には、以下のプロパティを持つオブジェクトを渡すことができます:
| プロパティ | 型 | 説明 | デフォルト |
|---|---|---|---|
| onData | Formula | データが受信されたときにトリガーされるコールバック | 未定義 |
| onError | Formula | エラーの場合にトリガーされるコールバック | 未定義 |
| onTerminate | Formula | ポートがリリースされた時にトリガーされるコールバック | 未定義 |
コールバック関数
すべてのコールバック関数は、2つの引数を受け取ります:
| 引数 | 型 | 説明 |
|---|---|---|
| $socket | UDPSocket オブジェクト | カレントのUDPSocket インスタンス。 |
| $event | UDPEvent オブジェクト | イベントに関する情報が含まれているオブジェクト |
コールバックの呼び出しの順番:
onDataはデータが受信されるたびにトリガーされます。onErrorはエラーが発生した場合にトリガーされます。onTerminateは常にポートが閉じられる直前にトリガーされます(ソケットが閉じられたか、エラーが発生した場合です)。
UDPEvent オブジェクト
コールバック関数 が呼ばれた際にはUDPEvent オブジェクトが返されます。
.errors
errors : Collection
説明
.errors プロパティにはソケットに関連したエラーオブジェクトのコレクションが格納されています。 各エラーオブジェクトにはエラーコード、エラーの詳細、そしてそのエラーを起こしたコンポーネントの署名が格納されています。
| プロパティ | 型 | 説明 | |
|---|---|---|---|
| errors | Collection | エラー発生時の 4Dエラースタック | |
| [].errCode | Number | 4Dエラーコード | |
| [].message | Text | 4Dエラーの詳細 | |
| [].componentSignature | Text | エラーを返した内部コンポーネントの署名 |
.port
port : Number
説明
.port プロパティにはリッスンするポート番号 が格納されています。 このプロパティは 読み取り専用 です。
.send()
.send( data : Blob ; hostName : Text ; remotePort : Integer )
| 引数 | 型 | 説明 | |
|---|---|---|---|
| data | BLOB | -> | 送信するデータ |
| hostName | Text | -> | サーバーの名前またはIP アドレス |
| remotePort | Integer | -> | 接続するリモートポート(0=任意) |
説明
send() 関数は、data 引数のデータをhostName で指定したリモートサーバーに、remotePort 引数で指定したポート番号で送信します。
hostName 引数はデータの送信先のサーバーの名前またはIP アドレスです。
remotePort 引数は接続するポート番号です。 0 を渡した場合、利用可能な任意のポートが使用されます。