ウェザーボードのパソコン側アプリ(TCP)


【ウェザーボードのシステムの概要】

製作するシステムの構成は下図のようにしますが、この構成はUDPの場合と全く同じで、
プロトコルだけがUDPからTCPに変わっているだけです。
パソコン側のアプリケーションプログラムも同じVisual Basic 2010で製作します。
ここでのアプリケーション製作では、「TCPクライアントクラス」を使います。



製作するシステムとしての機能も、ウェザーボードとパソコン間で送受するデータの
フォーマットも、UDPの場合と全く同じとします。


【アプリケーションの全体構成と仕様】
製作するプログラムは、まずFormを下図のようにほぼUDPの製作例と同じようにして、
それぞれのボタンごとに機能を割り付けています。
追加したのは、通信相手のIPアドレスとポート番号を自由に設定できるようにしたことです。
状態表示はボタンとテキストボックスの色で表現し、計測データは数値でテキストボックスに
表示します。
メッセージ欄にはネットワークの接続状態や送受信エラーの表示をします。
Button1とかTextBox1とか記入されているのが各コンポーネントのプロパティ名です。




アプリケーション機能は大部分がボタンで実行開始され、処理の流れはUDPの
場合とまったく同じ流れとなります。

【TCPクライアントクラスの使い方】

Visual BasicでTCP通信を行うためには、特別なAPI関数を使う必要があります。
マイクロソフトから提供されているAPI関数は、「TCP Clientクラス」と「NetworkStreamクラス」
と呼ばれるものです。
TCP ClientクラスはTCP通信のクライアントを作成するために使い、NetworkStreamクラスは
生成したTCPクライアントで実際のデータの送受信をするために使います。
この中で用意されているクラス内の代表的なメンバ(プロパティやメソッド)は下表のように
なっています。

【TCP Clientクラスのメンバー】
(1) コンストラクタ
 コンストラクタ  書式 と 機能
 TcpClient TcpClientクラスの新しいインスタンスを生成する
《書式》 いくつかの書式がある
  TcpClient()        :インスタンスを生成し初期化する
  TcpClient(IPEndPoint)   :ローカルエンドポイント指定でインスタンス生成
  TcpClient(String, Int32) :リモートホストとリモートポート指定でインスタンス生成
                (リモートホストが確定されるのでSendで相手指定不要)
《使用例》
  Dim TcpClientA As New TcpClient(3000)  ‘ローカルポート3000でインスタンス生成

(2) プロパティ
 プロパティ  書式 と 機能
 Available 読み取り可能なネットワークから受信したデータの量を取得する
《使用例》
  Dim value As Integer
  value = ClientA.Available
Connected リモートと接続されているかどうかを示す
 戻り値 :接続中 = true  それ以外 = false
《使用例》
  If ClientA.Connected = true Then
 IPEndPoint IPアドレスとポート番号で特定の相手を表す情報を格納している(独立クラス)
《使用例》
  Dim Remote As New IPEndPoint(IPAddress.Any, 0)  ‘任意の相手を指定
 特定の相手とする場合の例
 Dim HostA As New IPEndPoint("192.168.1.105", 10002)

(3) メソッド
 メソッド名 書式と機能 
 Connect IPアドレスまたは名称とポート番号で指定されたリモートホストと接続する
以降はこの特定のリモートとのみの通信に限定される
《書式》複数書式がある
  TcpClient.Connect(IPEndPoint)     ‘指定エンドポイント
  TcpClient.Connect(IPAddress, Int32)  ‘IPアドレス、ポート番号
  TcpClient.Connect(String, Int32)    ‘ホスト名、ポート番号
《使用例》
 Dim ClientA As New TcpClient()
 ホスト名を使う場合
   ClientA.Connect("PIC-UIO", 10002)
 IPアドレスを使う場合
  ClientA.Connect("192.168.1.24", 2000)
 Close ConnectしたTCP接続を終了せずに、ソケットを無効としリソースを解放する
接続の終了にはNetworkStreamをCloseする必要がある
《書式》 TcpClient.Close()
《使用例》
  ClientA.Close()
 GetStream データの送受信に使用するNetworkStreamを取得する 取得できなければ例外を発生
《書式》
  Dim Value As NetworkStream
  Value = ClientA.GetStream()


【NetWork Stream Classのメンバー】
(1) コンストラクタ
 コンストラクタ  書式 と 機能
 NetworkStream NetworkStreamの新しいインスタンスを生成する
《書式》 いくつかの書式がある
  NetworkStream      :インスタンスを生成し初期化する
  NetworkStraem(Socket)  :指定Socketの新しいインスタンスを生成する

(2) メソッド
 メソッド名 書式と機能 
Close NetworkStreamをCloseしすべてのリソースを解放する
《書式》 NetworkStream.Close()
《使用例》
  MyStream.Close()
 Read NetworkStreamからデータを読み取る
《書式》
   NetworkStream.Read(buffer, offset, size) As Integer
     buffer:取り出したデータを格納するバッファ、Byte()型
      offset:格納を開始するbufferの位置
      size :読み取るバイト数
      戻り値:読み出したバイト数
《使用例》GetStreamで取得したNetworkStreamから読み出しBufferに格納する
   Dim MyStream As NetworkStream
   Dim Buffer As Byte()
   MyStream = ClientA.GetStream()
   Buffer = MyStream.Read(Buffer, 0, Buffer.Length)
 Write NetworkStreamにデータを書き込む
《書式》
  NetworkStream.Write(buffer, offset, size)
     buffer:書き込むデータ Byte()型
     offset:書き込みを開始するbuffer内の位置
     size :書き込むバイト数
《使用例》
   MyStream.Write(Mesure, 0, Mesure.Length)


このTCP ClientクラスとNetworkStreamクラスをVisual Basicで使うときの
基本的な使い方は、下記リストのようにします。


最初にSocketクラスをつかうことを宣言部で宣言しクラスを呼び出します。

@ TCPクライアントのインスタンスをTcpClient()コンストラクタを使って生成し
  初期化します。
  同様にNetworkStreamクラスのインスタンスを作成し初期化します。
  一緒に受信バッファを配列サイズ指定で用意しておきます。

A Connect()メソッドで相手を指定して接続します
  例ではIPアドレスとポート番号を指定していますので、一意に相手が決定します。
  以降はこの相手を特定して送受信することになります。
  正常に接続できたらその接続で送受信できるようにNetworkStreamの実態を
  GetStream()で取得します。

B データの送信はNetworkStreamのWrite()メソッドで行います
  ここでの送信相手はConnect()で接続した相手に限定されます。

C 受信の場合には、Read()メソッドを使います。
  このメソッドはデータが無いとき実行すると0を返しブロックすることはありませんが、
  先にAvailableプロパティで受信データがあるかどうかを確認してからReadメソッドを
  実行します。受信するデータはBYTE型の配列ですから、文字列で扱うときには
  変換が必要です。

D 終了させるときにはTCP接続を切り離す必要があります。
  NetworkStreamをクローズして接続を切り離してから、TCPクライアントをクローズして
  すべてのリソースを解放します。

【アプリケーションのダウンロード】

ウェザーボードのパソコン側のTCPアプリケーションプログラムは、下記から
ダウンロードできます。
Visual Basic 2010のプロジェクト1式です。Expressでもコンパイル可能です。
binフォルダの中にexeファイルがありますので、直接実行も可能です。

  ★★★ ウェザーボードのパソコン側アプリ ダウンロード ★★★





   目次ページへ