stars による情報のプッシュ配信 - yamaguchi u...3 wpf(visual basic)の使用方法...

33
平成 23 年 3 月 16 日 第 6 回情報技術研究会 演習テキスト STARS による情報のプッシュ配信 -Visual Basic による STARS の利用方法- 山口大学 工学部 田内

Upload: others

Post on 04-Feb-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

  • 平成 23年 3月 16日

    第 6回情報技術研究会

    演習テキスト

    STARS による情報のプッシュ配信 -Visual Basic による STARS の利用方法-

    山口大学 工学部 田内 康

  • 内容

    1 今回の演習について .........................................................................................................2

    1.1 STARS について .......................................................................................................2

    1.2 演習の準備 ................................................................................................................2

    2 STARS サーバの起動方法と動作確認 .............................................................................3

    2.1 解凍 ...........................................................................................................................3

    2.2 STARS の実行...........................................................................................................3

    2.3 接続確認 ....................................................................................................................4

    2.4 設定 ...........................................................................................................................4

    2.5 通信テスト(1対 1通信) .......................................................................................5

    2.6 通信テスト(イベント配信) ...................................................................................5

    2.7 STARS に関して知っておくこと・その他 ...............................................................6

    3 WPF(Visual Basic)の使用方法 ...................................................................................7

    3.1 目標 ...........................................................................................................................7

    3.2 起動 ...........................................................................................................................8

    3.3 デザイン ....................................................................................................................9

    3.3.1 縦のグリッドを調整 ..........................................................................................9

    3.3.2 タイトル行の設定 ........................................................................................... 12

    3.3.3 メッセージ送信部分のデザイン ..................................................................... 14

    3.3.4 メッセージ受信部のデザイン作成 ................................................................. 18

    3.3.5 デザインの完成 ............................................................................................... 21

    3.4 プログラム ............................................................................................................. 22

    3.4.1 STARS の実装 ................................................................................................ 22

    3.4.2 STARS のテスト(その1) ............................................................................... 25

    3.4.3 STARS のテスト(その 2) ................................................................................ 25

    3.4.4 他の端末からのメッセージの受付 ................................................................. 27

    3.4.5 カメラのデータを表示するプログラム .......................................................... 29

    4 終わりに ........................................................................................................................ 23

    5 送信用のプログラム .......................................................................................... 23

  • page. 2

    1 今回の演習について

    1.1 STARS について STARS(Simple Transmission and Retrieval System)は、KEKの技術職員が作成し

    た通信ライブラリである。これは、TCP/IP を用いてデータを転送する仕組みで 1 台の PC

    内で複数のプログラム間の通信はもちろん、複数台の PCによる大規模システムまで構築す

    ることが可能である。プログラム間の通信が単純化されると分散プログラムの作成が容易

    になり、1つずつのプログラムが単純になると、プログラムのエラーを減らすメリットなど

    も副産物として得られる。

    STARS サーバ(サービス)と複数のクライアント(端末)で構成した 1 つのまとまりを

    STARS ネットワークと呼ぶ。STARS ネットワークはブリッジを介して他のネットワーク

    (STARSや TAIN、COACK)と接続可能である。

    STARS の特徴・現在の仕様は以下のとおりである。

    STARS本体はPerlで書かれている。したがってUNIXなどの各種OSで動作する。

    Windows版は Active Perl で実行形式に変換してあり、サービスでも動作する。

    STARS で通信可能なものはテキストのみである。

    通信は 1対 1通信および、1対nのイベント配信である。

    詳しくは http://stars.kek.jpをご覧ください

    1.2 演習の準備 デスクトップに作業用のフォルダ giken6thを作成する。今回はこの中で作業を行う。

    http://stars.kek.jp/

  • 2 STARS サーバの起動方法と動作確認

    2.1 解凍 stars.kek.jp の Web サイトより kernel_20100720155245.zip を giken6th フォルダに

    ダウンロードし、解凍する。(後ろの数値はビルドした日にちであり変わる)

    2.2 STARS の実行 takaserv.exe をダブルクリックして実行します。これで STARS は起動しました。(無

    地のWindows枠が出ます)

    サービスとして登録するには、

    (1)ファイルを適当なフォルダ(たとえば C:¥stars)に置きます。c:¥Program Files の

    下は OSによって管理されるので、Vista以降は使わないのが無難です。

    (2)コマンドプロンプトを立ち上げます。(Vista以降は管理者として実行)

    (3)ファイルを置いたフォルダに移って以下のコマンドを実行します。

    takaserv --install auto -lib LibDir (LibDir は takaserv-libのフォルダ)

    (4)再起動するとサービスとして自動的に実行されます。

    削除するには以下のコマンドを実行してください。

    takaserv –remove

    ※現在Windows Server 2008R2(64ビット)での動作も確認している。

  • page. 4

    2.3 接続確認 STARS に接続してみる。STARS は既定では 6057ポートを使用する。

    コマンドプロンプトを立ち上げて telnet localhost 6057を実行します。

    数値(接続番号)の返答があるので、その後 term1 stars と入力する。term1 がノード

    名(アカウント)で starsがパスワードである。上手く接続できると System>term1 Ok:

    と返答がくる。(受信の改行設定を行わないと横にシフトする)

    2.4 設定 先ほど解凍したフォルダ内の takaserv-libを見ます。

    この中で term1.key というファイルがある。このファイル名がノード名であり内容が

    パスワードになる。パスワードは、100行程度あっても構わない。

    allow.cfg は接続許可の IP一覧を記した定義ファイルである。

    reconnctable_allow.cfg で、再接続可能なノード名を設定する。(ただし、コマンドを打

    つまでは有効にならない)

    通信テストを行うために term2,term3のノード(パスワード)の定義を行う。

    term1.key をもとに term2.key、term3.key のファイルを作成する。(コピーしてファイル名を変更すると良い)

  • 2.5 通信テスト(1 対 1 通信) さらに 2 つコマンドプロンプトを開いて同様に term2,term3 のノード名で接続する。

    コマンドプロンプトが4つの Window で開いている状態になる。(stars 本体、

    term1,term2,term3)

    term1 より term2 test と入力します。そうすると term2 に term1>term2 testと応答が表示される。

    term1のコマンドプロンプト

    term2のコマンドプロンプト

    これが 1対 1通信である。

    同様に term2から term3に送信してみましょう

    2.6 通信テスト(イベント配信) イベント配信をリクエストするのは flgonコマンドである。解除は flgoff です。これを

    特殊なノード名である Systemに送信します。

    term2 term3で System flgon term1 と送信

    term2で term1のイベント配信登録

    term3で term1のイベント配信登録

    これで term1からのイベントが受信できる。イベントの送信は Systemに対して行い、

    最初に_を付ける。

    term1から System _Event Testと送信する。

    term1の送信メッセージ

    イベント送信がうまくいくと、term2、term3 に term1>term2 _Event Test 、

    term1>term3 _Event Testと応答がある。

    term2の応答メッセージ

  • page. 6

    term3の応答メッセージ

    これがイベント配信である。

    2.7 STARS に関して知っておくこと・その他

    コマンド

    quit 接続の終了。

    通信の約束ごと

    _が最初につくメッセージ イベント配信

    @が最初につくメッセージ 応答メッセージ

    ノードを作成するときには helloに対して応答メッセージを返答する事。

    特殊なノード名

    System

    Systemは STARSネットワークに対しての指示を行う。

    System help Systemのコマンド一覧表示

    System listnodes 接続しているノード一覧表示

    System loadreconnectablepermission 再接続可能なノード名を reconnctable_allow.cfg

    から読み込んで、設定する

    Debugger

    System が特殊なノード名であったように、Debugger も特殊なノード名である。

    Debugger のノード名で接続すると、全部の通信内容を見ることが出来る。(初期

    パスワードは stars)

    図 Debbuger で接続したとき

  • 3 WPF(Visual Basic)の使用方法

    3.1 目標 今回の目標としては以下のシステムを構築する。

    複数のノード間での情報共有

    カメラ画像の同時配信

    ノード名:term0(カメラ用)

    ノード名:term1

    ノード名:termn

    ノード名:term3

    ノード名:term2

    STARS

    サーバ IP:xxx.xxx.xxx.xxx

    図 3.1ネットワーク図

    タイトル行 縦50px第6回情報技術研究会 演習

    メッセージ 送信 メッセージ送信行 縦50px

    みんなからのメッセージを表示

    カメラ画像表示 メッセージ受信 縦のこり

    1対1に分ける

    図 3.2 端末の画面設計

  • page. 8

    3.2 起動 Visual Studio2008を起動する。新しいプロジェクトで、WPFアプリケーションを選

    択。

    プロジェクトが出来ると以下の様な画面になる。

  • 3.3 デザイン 3.3.1 縦のグリッドを調整

    Gridを選択する。(真ん中をクリックするか、XAMLソースの Gridタグを選びます)。以下の様にグリッドの定義を表す画面になる。

    Gridプロパティの RowDefinisionsをクリック

    追加ボタンを押す。

  • page. 10

    プロパティの Heightを*から 50px に変更。変更したら OKボタンを押す。

    2行目も同様に 50px で追加、3行目は変更せずに、そのまま追加。出来上がると、下の様なデザインになる。

  • XAMLは以下のようになる。

  • page. 12

    3.3.2 タイトル行の設定

    ツールボックスから TextBlockを一番上のグリッドにもっていく。

    TextBlockのプロパティを変更する。Grid.Rowを 0、Horizontal Alignmetを center、

    Vertical Alignmentを Center、Marginを 0、Textを“第 6回情報技術研究会 演

    習“に変更。

  • 画面は以下のようになる

    XAMLは以下のようになる。

  • page. 14

    3.3.3 メッセージ送信部分のデザイン

    TextBlockをツールボックスから 2段目にもっていきます。

    テキストブロックのプロパティを以下のように設定する。

    Grid.Row=”1”, Width=”Auto”, Height=”Auto”, Horizontalalignment=”Left”, VerticalAlignment=”Center”, Margin=”10,0,0,0”,

    Text=”メッセージ”

  • TextBox をツールボックスから TextBlockメッセージの横にもっていく。

    TextBox のプロパティを次のように変更。Name=”tb_message”, Grid.Row=”1”, Width=”Auto”,

    Height=”Auto”, Horizontalalignment=”Strech”, Verticalalignment=”Center”,

    Margin=”90,0,60,0”

  • page. 16

    ツールボックスから Buttonを TextBoxの横にもっていきます。

    Buttonのプロパティを次のように変更。Name=”bt_message”, Content=”送信”, Grid.Row=”1”, Width=”Auto”, Height=”Auto”,

    Horizontalalignment=”Right”, VerticalAlignment=”Center”, Margin=”0,0,10,0”

  • 以上で 2行目のメッセージ送信関係のデザインは終わりである。現時点で、以下の様なデザインになる。

    XAMLは以下の様になる。

    送信

  • page. 18

    3.3.4 メッセージ受信部のデザイン作成

    メッセージ受信部は他の端末からの受信と、カメラからの画像受信の部分の 2 か所であるので。2 列に分割する。まずは、Grid を 3 列

    に挿入します。

    Gridのプロパティを次の以下のように変更。Grid.Row=”2”, Width=”Auto”,. Height=”Auto”, HorizontalAlignment=”Stretch”,

    VerticalAlignment=”Stretch”, Margin=”0” また、ColumnDefinitionsのボタンを押して、2つの ColumnDefinition を追加する。(プロパティに変更は必要ないので、触らなくて結

    構)

  • 他の端末からのメッセージを受け取る部分の作成。ツールボックスから、StackPanelを 3行目の左側にもっていきます。

    StackPanel のプロパティは次のように変更。Name=”sp_Message”, Grid.Column=”0”, Grid.ColumnSpan=”1”, Orientation=”Vertical”,

    Width=”Auto”, Height=”Auto”, HolizontalAlignment=”Stretch”, VerticalAlignment=”Stretch”, Margin=”0”

  • page. 20

    ツールボックスより Imageを 3行目の右側にもっていく。

    プロパティを次のように変更。Name=”Image_camera”, Grid.Column=”1”, Grid.ColnSpan=”1”,

    Width=”Auto”, Height=”Auto”, HolizontalAlignment=”Stretch”, VertialAlignment=”Stretch”,

    Margin=”0”

  • 3.3.5 デザインの完成

    ここまでで、デザインが完成。

    XAMLは、

    送信

  • page. 22

    3.4 プログラム 3.4.1 STARS の実装

    STARS を実装して Systemに helloを送信してみる。

    http://stars.kek.jp/から starsinterface.NET_lib_20100720155245.zipをダウンロードして解凍します。(実習では、プログラムのフォル

    ダにコピー済み)

    ソリューションエクスプローラでプロジェクトの上で右クリックし、参照の追加を使用して、StarsInterface.dll を使えるようにする。

    いったんプロジェクトフォルダ内に StarsInterface.dll をコピーしてから、参照の追加をした方が、プロジェクトの移動とかが楽になる。

  • パスワードファイルを作成する必要があるので、ソリューションエクスプローラのプロジェクトで右クリックし追加新しい項目を選択。

    テキストファイルを選択し、ファイル名を key.txtにする。ファイルの中身はパスワードである。今回は starsと入力。入力が終わった

    ら保存。

    実行環境でこのファイルを使えるようにする。ソリューションエクスプローラで key.txtを右クリックし、プロパティを選択し以下のよ

    うに変更。ビルドアクション=”コンテンツ”, 出力ディレクトリにコピー=”常にコピーする”

    ※パスワードファイルは、STARS サーバの設定ファイルのノード名.key と同じ内容コピーしても良い。

  • page. 24

    デザイン画面でコントロール以外の部分をダブルクリックすると Loadイベントのコードを入力する画面になる。

    以下の画面にプログラムを打ち込んでいく。

  • 3.4.2 STARS のテスト(その1)

    まずは、簡単なプログラムを作成し、STARSの接続をテストする。

    プログラム中の term1は指定されたノード名に、localhostは指定されたサーバの IPアドレスに変更すること。

    メニューのデバッグデバッグの開始で確認する。起動と同時にダイアログボックスのメッセージが出ると正常

    3.4.3 STARS のテスト(その 2)

    プッシュ配信を受け取れるように、受信 Eventを登録して、StackPanel に表示する。STARS の受信は、マルチスレッドとなる。

    図 マルチスレッドの概念

    Class Window1

    Dim st As STARS.StarsInterface

    Dim stcb As STARS.StarsCbHandler

    Private Sub Window1_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded

    st = New STARS.StarsInterface("term1", "localhost", "key.txt", 6057) ‘STARSの接続の設定 st.Connect() ‘STARSサーバに接続

    st.Send("System", "hello") ‘Systemにhelloを送信

    MsgBox(st.Receive.allMessage) ‘受信した文字列をメッセージボックスに表示

    st.Disconnect() ‘STARSの接続を解除

    End Sub

    End Class

  • page. 26

    TextBox に helloと入力し送信ボタンを押してテストします。

    Class Window1

    Dim st As STARS.StarsInterface

    Dim stcb As STARS.StarsCbHandler

    Delegate Sub St_message_add_del(ByVal message As String) ‘マルチスレッド処理のためのプログラムの宣言

    Private Sub Window1_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded

    st = New STARS.StarsInterface("term1", "localhost", "key.txt", 6057) st.Connect()

    ' st.Send("System", "hello") ‘コメントに

    ' MsgBox(st.Receive.allMessage) ‘コメントに

    ' st.Disconnect() ‘コメントに

    stcb = New STARS.StarsCbHandler(AddressOf STARS_RCV) ‘STARSで受信した時の実行ルーチンの指定

    st.StartCbHandler(stcb) ‘受信イベントの開始

    End Sub

    Sub STARS_RCV(ByVal sender As Object, ByVal ev As STARS.StarsCbArgs)

    If ev.Message.StartsWith("hello") Then ‘helloを受信した時の処理

    st.Send(ev.from, "@hello recive hellocommnad") ‘送信元のノード名にメッセージを送る

    ElseIf ev.from.StartsWith("System") Then ‘Systemから受信したら

    Dispatcher.Invoke(New St_message_add_del(AddressOf St_message_add), ev.allMessage) ‘メインルーチンにInvokeする。

    ‘直接St_message_add(ev.allMessage)は不可

    End If

    End Sub

    Sub St_message_add(ByVal message As String)

    Dim tb As New TextBlock ‘StackPanelに入れるコントロールを定義

    Static Dim i As Integer = 0 ‘件数を記憶

    Dim br() As Brush = {Brushes.LightPink, Brushes.LightBlue, Brushes.LightGreen} ‘バックグラウンドの色を用意

    tb.Text = message ‘表示文字列を指定

    tb.Background = br(i Mod 3) ‘表示のバックグラウンドを指定

    sp_Message.Children.Insert(0, tb) ‘StackPanelにコントロールを追加

    i += 1 ‘件数に1を追加

    End Sub

    Private Sub bt_message_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles bt_message.Click

    st.Send("System", tb_message.Text) ‘tb_messageに入力した文字列を送信

    End Sub

    End Class

  • 3.4.4 他の端末からのメッセージの受付

    STARS は 相手のノード名 メッセージ の送り方の他 相手のノード名 コマンド メッセージ の送り方がある。

    今後の過程の為ここではコマンドとして data(イベント配信なので“_data”)を作る。プログラムを以下のように変更する。

    Class Window1

    Dim st As STARS.StarsInterface

    Dim stcb As STARS.StarsCbHandler

    Delegate Sub St_message_add_del(ByVal message As String)

    Private Sub Window1_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded

    st = New STARS.StarsInterface("term1", "localhost", "key.txt", 6057)

    st.Connect()

    ' st.Send("System", "hello") ‘コメントに変更

    ' MsgBox(st.Receive.allMessage) ‘コメントに変更

    ' st.Disconnect() ‘コメントに変更

    stcb = New STARS.StarsCbHandler(AddressOf STARS_RCV)

    st.StartCbHandler(stcb)

    For i = 0 To 15

    st.Send("System", "flgon term" & i) ‘イベント配信登録

    Next

    End Sub

    Sub STARS_RCV(ByVal sender As Object, ByVal ev As STARS.StarsCbArgs)

    If ev.Message.StartsWith("hello") Then

    st.Send(ev.from, "@hello recive hellocommnad")

    ElseIf ev.from.StartsWith("System") Then

    Dispatcher.Invoke(New St_message_add_del(AddressOf St_message_add), ev.allMessage)

    ElseIf ev.from.StartsWith("term") Then

    If ev.command = "_data" Then ‘コマンドが”_data”なら以下を実行

    Dim message As String = ev.parameters

    Dispatcher.Invoke(New St_message_add_del(AddressOf St_message_add), "@" & ev.from & vbCrLf & message)

    End If

    End If

    End Sub

    Sub St_message_add(ByVal message As String)

    Dim tb As New TextBlock

    Static Dim i As Integer = 0

    Dim br() As Brush = {Brushes.LightPink, Brushes.LightBlue, Brushes.LightGreen}

    tb.Text = message

    tb.Background = br(i Mod 3)

    sp_Message.Children.Insert(0, tb)

    i += 1

    End Sub

  • page. 28

    この時点では日本語の通信は上手くいきません。

    Private Sub bt_message_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles bt_message.Click

    st.Send("System", "_data " & tb_message.Text)

    End Sub

    End Class

  • 3.4.5 カメラのデータを表示するプログラム

    カメラのデータはバイナリなので XML内で Base64にエンコードしてある。同様にテキストもエンコードすることで日本語を送ること

    が可能になる。

    Class Window1 Dim st As STARS.StarsInterface Dim stcb As STARS.StarsCbHandler Delegate Sub St_message_add_del(ByVal message As String) Delegate Sub draw_image_del(ByVal data As String) Private Sub Window1_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded st = New STARS.StarsInterface("term1", "localhost", "key.txt", 6057) st.Connect() ' st.Send("System", "hello") ' MsgBox(st.Receive.allMessage) ' st.Disconnect() stcb = New STARS.StarsCbHandler(AddressOf STARS_RCV) st.StartCbHandler(stcb) For i = 0 To 15 st.Send("System", "flgon term" & i) Next End Sub Sub STARS_RCV(ByVal sender As Object, ByVal ev As STARS.StarsCbArgs) If ev.Message.StartsWith("hello") Then st.Send(ev.from, "@hello recive hellocommnad") ElseIf ev.from.StartsWith("System") Then Dispatcher.Invoke(New St_message_add_del(AddressOf St_message_add), ev.allMessage) ElseIf ev.from.StartsWith("term") Then If ev.command = "_data" Then Dim message As String Dim mm(1000) As Byte Dim i As Integer Dim bb As New System.IO.StringReader(ev.parameters) Dim xmlrd As New System.Xml.XmlTextReader(bb) ‘XMLを読み込む xmlrd.ReadToDescendant("DATA") ‘DATAタグまで移動 xmlrd.MoveToContent() ‘コンテンツまで移動 i = xmlrd.ReadBase64(mm, 0, 1000) ‘xml内のデータを読み込む message = Text.Encoding.Unicode.GetString(mm, 0, i) ‘Byte列からStringに変換 Dispatcher.Invoke(New St_message_add_del(AddressOf St_message_add), "@" & ev.from & vbCrLf & message) ElseIf ev.command = "_cameradata" Then ‘カメラのデータなら Dim message As String = ev.parameters Dispatcher.Invoke(New draw_image_del(AddressOf draw_image), message) ‘画像の表示 End If End If End Sub

  • page. 30

    Sub St_message_add(ByVal message As String) Dim tb As New TextBlock Static Dim i As Integer = 0 Dim br() As Brush = {Brushes.LightPink, Brushes.LightBlue, Brushes.LightGreen} tb.Text = message tb.Background = br(i Mod 3) sp_Message.Children.Insert(0, tb) i += 1 End Sub Private Sub bt_message_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles bt_message.Click 'st.Send("System", "_data " & tb_message.Text) ‘コメントに Dim xx() As Byte = System.Text.Encoding.Unicode.GetBytes(tb_message.Text) ‘StringをByte列に Dim xml_data As New System.IO.StringWriter Dim xmltxtwr As New System.Xml.XmlTextWriter(xml_data) xmltxtwr.WriteStartDocument() xmltxtwr.WriteStartElement("DATA") xmltxtwr.WriteBase64(xx, 0, xx.Length) xmltxtwr.WriteEndElement() xmltxtwr.WriteEndDocument() st.Send("System", "_data " & xml_data.ToString()) ‘”_data”コマンドを送信 End Sub Sub draw_image(ByVal data As String) Dim bi As New BitmapImage ‘Bitmapデータ構造体の作成 Dim mm(100000) As Byte Dim mm2 As New System.IO.MemoryStream(mm) Dim i As Integer Dim bb As New System.IO.StringReader(data) Dim xmltxtrd As New System.Xml.XmlTextReader(bb) xmltxtrd.ReadToDescendant("DATA") xmltxtrd.MoveToContent() i = xmltxtrd.ReadBase64(mm, 0, 100000) Try ‘データが不良だとプログラムが落ちるので bi.BeginInit() ‘Bitmapデータの初期化を宣言 bi.StreamSource = mm2 ‘Bitmapデータの割り当て bi.EndInit() ‘Bitmapデータの初期化終了 Image_camera.Source = bi Catch ex As Exception End Try End Sub End Class

  • 4 終わりに Visual Basic で STARS を利用する方法を記した。合わせて WPF やマルチスレッドの手続き、XML データの作成読み込み方法も記

    した。本来はWindowの終了に STARS との接続解除とかをきちんと記した方がよい。

    実際の利用には、さらに Try Catchでエラーをキャッチしたりする必要があるが、根本的な使用方法が学べたと思う。

    5 送信用のプログラム パナソニック(BBシリーズ)用である。

    Imports System.Net

    Public Class Form1

    Dim st As STARS.StarsInterface

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    st = New STARS.StarsInterface("term0", "localhost", "key.txt", 6057)

    st.Connect()

    Timer1.Start() 'Interval=5000デザインで指定

    End Sub

    Public Function bb_get_picture2(ByVal camera_ip As String, ByVal id As String, ByVal passwd As String) As Bitmap

    '-----------------画像取得

    '--------idとPASSの設定

    Dim myCache As New CredentialCache

    myCache.Add(New Uri("http://" & camera_ip & "/"), "Basic", New NetworkCredential(id, passwd))

    Dim ww1 As System.Net.HttpWebRequest

    Dim ww2 As System.Net.HttpWebResponse

    Static ccc As Integer = 0

    ww1 = System.Net.HttpWebRequest.Create(New Uri("http://" & camera_ip & "/SnapshotJPEG?Resolution=640x480&Quality=Standard&Count=" & ccc))

    ccc += 1

    ww1.Credentials = myCache

    ww1.Method = "GET"

    ww1.ContentLength = 0

    Try

    ww2 = ww1.GetResponse()

    Dim receiveStream As System.IO.Stream = ww2.GetResponseStream()

    bb_get_picture2 = New Bitmap(receiveStream)

    ww2.Close()

    Catch ex As Exception

    Console.WriteLine(Me.Text & ":画像取得失敗" & Now.ToLongTimeString)

    bb_get_picture2 = Nothing

    End Try

    End Function

  • page. 32

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

    '--------------再送用の画像の作成

    Dim bitmap_data As Bitmap = bb_get_picture2("192.168.11.5", "administrator", "password")

    If bitmap_data IsNot Nothing Then

    Dim xmlwr As System.Xml.XmlTextWriter

    Dim xml_picture_data As System.IO.TextWriter

    Dim ms As New System.IO.MemoryStream

    bitmap_data.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)

    xml_picture_data = New System.IO.StringWriter

    xmlwr = New System.Xml.XmlTextWriter(xml_picture_data)

    xmlwr.WriteStartDocument()

    xmlwr.WriteStartElement("camera_data")

    xmlwr.WriteElementString("ID", "BB")

    xmlwr.WriteElementString("NAME", "BB-HCM705")

    xmlwr.WriteElementString("DATE", Now)

    xmlwr.WriteStartElement("DATA")

    xmlwr.WriteBase64(ms.ToArray, 0, ms.Length)

    xmlwr.WriteEndElement()

    xmlwr.WriteEndElement()

    xmlwr.WriteEndDocument()

    ms.Dispose()

    PictureBox1.Image = bitmap_data

    st.Send("System", "_cameradata " & xml_picture_data.ToString())

    End If

    End Sub

    End Class