Main Content

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