TCP/IP を使用したエコー サーバーとのバイナリおよび ASCII データの通信
この例では、エコー サーバーを設定し、tcpclient
オブジェクトを作成することで TCP/IP を使用して通信する方法を示します。バイナリ データと終端文字列データをサーバーに送信すると、同じデータがサーバーからクライアントにエコー バックされます。
TCP/IP エコー サーバーおよびクライアントの設定
TCP/IP エコー サーバーをポート 4500 に作成します。
echotcpip("on",4500);
tcpclient
オブジェクトを作成し、サーバーに接続します。リモート ホストを "localhost"
に指定すると、エコー サーバーに接続されます。エコー サーバーに使用したものと同じポート番号を指定します。
t = tcpclient("localhost",4500)
t = tcpclient with properties: Address: 'localhost' Port: 4500 NumBytesAvailable: 0 Show all properties, functions
バイト コールバック モードを使用したバイナリ データの書き込みと読み取り
指定したバイト数のデータが利用可能になるたびにデータを読み取るコールバック関数 readDataFcn
を作成します。読み取ったデータを tcpclient
オブジェクトの UserData
プロパティに保存します。この例の最後にある関数 readDataFcn
を参照してください。
10 バイトのデータを受信するたびにトリガーされるようにコールバック関数を設定します。
configureCallback(t,"byte",10,@readDataFcn);
10 バイトのデータをエコー サーバーに送信します。
sendData = 1:10;
write(t,sendData,"uint8");
エコー サーバーはバイナリ データを TCP/IP クライアントに送り返します。
コールバック関数 readDataFcn
が操作を完了できるように、1 秒間一時停止します。
pause(1);
UserData
プロパティに保存されているバイナリ データを読み取って表示します。
data = t.UserData
data = 1×10 uint8 row vector
1 2 3 4 5 6 7 8 9 10
このデータは、エコー サーバーに書き込んだデータと一致しています。
終端文字コールバック モードを使用した ASCII データの書き込みと読み取り
データ内に終端文字が見つかるたびにデータを読み取るコールバック関数 readASCIIFcn
を作成します。読み取ったデータを tcpclient
オブジェクトの UserData
プロパティに保存します。この例の最後にある関数 readASCIIFcn
を参照してください。
終端文字列データを読み取るようにコールバック関数を設定します。データ内に終端文字を受信すると、コールバックがトリガーされます。
configureCallback(t,"terminator",@readASCIIFcn);
Terminator
プロパティ値を "LF"
に設定します。
configureTerminator(t,"LF");
writeline
を使用して string データをエコー サーバーに送信します。この string データに終端文字 "LF"
が自動的に追加されます。
writeline(t,"Echo this string.");
エコー サーバーは ASCII データを TCP/IP クライアントに送り返します。
コールバック関数 readASCIIFcn
が操作を完了できるように、1 秒間一時停止します。
pause(1);
UserData
プロパティに保存されている ASCII データを読み取って表示します。
textData = t.UserData
textData = "Echo this string."
このデータは、エコー サーバーに書き込んだデータと一致しています。
接続のクリア
エコー サーバーを停止し、tcpclient
オブジェクトをクリアします。
echotcpip("off"); clear t
コールバック関数
バイナリ データを読み取るためのコールバック関数
この関数は read
を呼び出し、BytesAvailableFcnCount
のデータのバイト数を読み取ります。このデータがサーバーによってエコー バックされます。
function readDataFcn(src, ~) src.UserData = read(src,src.BytesAvailableFcnCount,"uint8"); end
ASCII データを読み取るためのコールバック関数
この関数は readline
を呼び出し、元々 tcpclient
オブジェクトによって送信された ASCII データを読み取ります。このデータがサーバーによってエコー バックされます。
function readASCIIFcn(src, ~) src.UserData = readline(src); end