通信対戦プログラム

Similar documents
チャットプログラム

チャットプログラム

通信対戦プログラム

チャットプログラム

回文作成支援プログラム

万年暦プログラム

回文作成支援プログラム

相性占いプログラム

ルーレットプログラム

通信対戦プログラム

データベース1

3D回転体プログラム

VB.NET解説

回文作成支援プログラム

ブロック パニック

Userコントロール

3D回転体プログラム

VB実用⑦ エクセル操作Ⅰ

相性占いプログラム

万年暦プログラム

ブロック崩し風テニス

画像閲覧プログラム

データベース1

データアダプタ概要

回文作成支援プログラム

64bit環境で32bitコンポーネントの利用

sinfI2005_VBA.doc

データベース1

VB実用Ⅲ⑩ フリーデータベースⅡ

Microsoft Word - VB.doc

NotifyIconコントロール

プロセス間通信

グラフィックス

インベーダープログラム

ファイル操作

Microsoft Word -

テキストファイルの入出力1

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター

ファイル操作-インターネットキャッシュ

Prog2_15th

構造体

占領双六ゲーム

Prog2_12th

わにわにパニックプログラム

正規表現応用

Microsoft Word _VBAProg1.docx

おらんかにクライアント操作マニュアル

Microsoft PowerPoint - VBA解説1.ppt [互換モード]

Java講座

回文作成支援プログラム

回文作成支援プログラム

CodeGear Developer Camp

画像閲覧プログラム

Prog2_2nd

Ver.1.1

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

// このクラスの有効期間中の各呼び出しに使用される キャッシュされた Socket オブジェクト Socket socket = null; // 非同期処理が完了したことを通知するために信号を送るオブジェクト static ManualResetEvent clientdone = new Ma

Microsoft Word - VBA基礎(3).docx

グラフィックス 目次

データベースⅠ

PowerPoint プレゼンテーション

神経衰弱ゲーム

mySQLの利用

図 2 Excel スプレッドシートの世界 のウィンドウ 図 3 Visual Basic の世界 のウィンドウ 図 3 の VBA ウィンドウは 図 2 の Excel ウィンドウのメニューの ツール をクリックし 開か れるプルダウンメニューで マクロ /Visual Basic Editor

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値

DAOの利用

エクセル詳細 アドイン

MS-ExcelVBA 基礎 (Visual Basic for Application)

10 完了 をクリック 13 このサーバーは認証が必要 をチェックして 設定 をクリック Windows メール Windows Vista に標準のメールソフト Windows メール の設定方法を説明します 1 スタート から 電子メール Windows メール をクリック 11 続いて設定ファ

1. 信頼済みサイトの設定 (1/3) この設定をしないとレイアウト ( 公報 ) ダウンロードなどの一部の機能が使えませんので 必ず設定してください 1 Internet Explorer を起動し [ ツール ]-[ インターネットオプション (O)] を選択します 2 [ セキュリティ ] の

(Microsoft Word - Excel\216\300\217K\212\356\221b1.doc)

プログラミング演習

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

ExcelVBA

マルチメディア・音声

ICONファイルフォーマット

目次 更新履歴... 1 はじめに... 3 レコードセット?... 3 準備... 5 SQL でデータを取得する... 6 データのループ処理... 7 列の値を取得する... 7 対象行を変更する (MoveFirst, MoveNext, MovePrevious, MoveLast)...

エクセルによる数値計算と化学への応用

モグラ叩きプログラム

Prog2_4th

PowerPoint プレゼンテーション

C#の基本

データベースⅡ

プレポスト【問題】

プログラミング演習

承 認

ListViewコントロール

草競馬プログラム

VFD256 サンプルプログラム

PowerPoint プレゼンテーション

( 目次 ) 1. はじめに 開発環境の準備 仮想ディレクトリーの作成 ASP.NET のWeb アプリケーション開発環境準備 データベースの作成 データベースの追加 テーブルの作成

Windows 7ファイル送信方法 SMB編

プログラミング基礎


PR300 電力モニタ 通信インタフェース (RS-485通信,Ethernet通信)

アプリケーション

第 1 章 : はじめに RogueWave Visualization for C++ の Views5.7 に付属している Views Studio を使い 簡単な GUI アプリケーションの開発手順を紹介します この文書では Windows 8 x64 上で Visual Studio2010

グラフィックス 目次

Transcription:

チャット VB5 プログラムの概要 Winsock コントロールを使用すると リモートコンピュータに接続し データを交換出来る事を利用して チャット ( 通信雑談システム ) を作成する サーバー クライアント共に 背景色が黄色のテキストボックスに必要項目を入力し 設定ボタンをクリックすると 通信が確立し チャットを開始する事が出来る 送信用テキストボックスに送信文を入力して送信ボタンをクリックすると テキストが送信される 送信文 受信文共に 受信用テキストボックスに逐次表示される 猶 通信状況等は 下部のステータスバーに 其の時の状態が表示される 今回の課題項目 単純変数の宣言 (Dim) 標準コントロールの利用 (Label Option Command Text Frame) プロパティの値の取得と設定 (Standard: BackColor Text Value ) プロパティの値の取得と設定 (Winsock: State RemoteHost RemotePort LocalIP 等 ) イベントの利用 (Load Click ConnectionRequest DataArrival) メソッドの利用 (Close Listen Connect Accept SendData GetData SetFocus) ステートメントの利用 (Unload End Exit Sub) 組込関数の利用 (Val RGB DoEvents) 制御構造構文 ( 条件分岐 If ~ Then Else End If ループ処理 Do ~ Loop) 演算子 ( 代入演算子 比較演算子 結合演算子 ) ActiveX コントロールの利用 ( プロジェクト コンポーネント コントロール ) 今回の重点項目 StatusBar コンポーネントの利用 (Panels 等 ) Winsock コンポーネントの利用 (Protocol RemoteHost RemotePort Listen Connect 等 ) 今回の応用項目 送受信文の画面表示を工夫する -1-

コンポーネント (ActiveX コントロール ) の組込 1. メニューバーより プロジェクト コンポーネント と進む VB でソケット通信を行うには 仲介役と成るコントロールが必要と成ります 今回はソケット通信用に Winsock を ステータス表示に StatusBar を使用します 標準コントロールでは無いので 普段はツールボックス内に表示されて居ません 標準コントロール以外のコントロールを使用出来る様にするには コンポーネントを組み込む必要が有ります 上記のコントロールは 通常 システムフォルダに下記のファイル名で保存されて居ます Microsoft Winsock Control 6.0 mswinsck.ocx Microsoft Windows Common Control 6.0 mscomctl.ocx 孰れも ActiveX(OCX) コントロールで有る 2. コンポーネント ダイアログボックスが表示されるので 下記のコントロールを選択する Microsoft Winsock Control 6.0 と Microsoft Windows Common Control 6.0 3. 上記の操作で ツールボックス内に夫々れのアイコンが追加される -2-

オブジェクト プロパティ一覧 フレーム 1 ラベル 3 ラベル 4 ラベル 5 Winsock ラベル 1 テキスト 1 テキスト 3 テキスト 5 ラベル 2 フレーム 2 フレーム 3 フレーム 4 テキスト 2 テキスト 4 テキスト 6 コマンドボタン 1 オプションボタン 1 オプションボタン 2 コマンドボタン 2 テキスト 8 テキスト 7 コマンドボタン 3 コマンドボタン 4 ステータスバー コントロールの種類 プロパティ プロパティの設定値 フォーム オブジェクト名 Form1 チャット フレーム1 オブジェクト名 fraset Font 設定 (MS 明朝, 太字,9) フレーム2 オブジェクト名 fraselect 空白 オプションボタン1 オブジェクト名 optserver サーバー オプションボタン2 オブジェクト名 optclient クライアント Value True ラベル1 オブジェクト名 lbllocal ローカル -3-

コントロールの種類 プロパティ プロパティの設定値 ラベル2 オブジェクト名 lblremote リモート ラベル3 オブジェクト名 lbladdress アドレス ラベル4 オブジェクト名 lblport ポート ラベル5 オブジェクト名 lblname 名前 テキストボックス1 オブジェクト名 txtaddressl Text 192.168.1.1 テキストボックス2 オブジェクト名 txtaddressr Text 192.168.1.2 テキストボックス3 オブジェクト名 txtportl Text 1001 テキストボックス4 オブジェクト名 txtportr Text 1002 テキストボックス5 オブジェクト名 txtnamel Text 空白 テキストボックス6 オブジェクト名 txtnamer Text 空白 コマンドボタン1 オブジェクト名 cmdset 設定 フレーム3 オブジェクト名 frasx 送信 テキストボックス7 オブジェクト名 txtsx Text 空白 コマンドボタン2 オブジェクト名 cmdsend 送信 フレーム4 オブジェクト名 frarx 受信 テキストボックス8 オブジェクト名 txtx Text 空白 MultiLine True ScrollBars 3- 両方 ソケット オブジェクト名 sckcom Protocol 0 - scktcpprotocol ステータスバー オブジェクト名 stainfo 最小幅 5000 - - サイズ自動設定 1-sbrSpring 配置 - 1-sbrCenter 1-sbrCenter スタイル - 6-sbrDate 5-sbrTime コマンドボタン3 オブジェクト名 cmdclear 消去 コマンドボタン4 オブジェクト名 cmdfinish caption 終了 -4-

フレーム他のコントロールをグループ化するコントロール 通常 チェックボックスやオプションボタンと共に使用し フレーム自体は 特定のを持たない オプションボタン複数の選択肢の中から 1 個だけを選択するコントロール チェックボックスとは異なり 1 個のグループの中で選択出来るオプションボタンは 1 個だけで有る ラベルテキストを表示するコントロール 此のテキストは ユーザーが直接入力したり変更したりする事は出来ない テキストボックステキストの入力や表示を行うコントロール 此のテキストは ユーザーが直接入力したり変更したりする事が出来る コマンドボタンユーザーが選択したコマンド ( 命令 ) や操作を実行するコントロール OK ボタンや実行ボタン等 処理の開始や中断 終了の合図に用いられ 最も良く利用されるコントロールです ソケット (Winsock) TCP ネットワークサービス 及び UDP ネットワークサービスへアクセスするを提供する ActiveX コントロール 此のコントロールを使用すると TCP 又は UDP を使用してリモートコンピュータに接続し 送受信双方向のデータ交換を行う事が出来る 孰れのプロトコルでも クライアント及びサーバーアプリケーションを作成出来る 中央のサーバーに送るユーザー情報を集めるクライアントアプリケーションの作成 複数のユーザーから集めたデータの中央コレクションポイントとしてするサーバーアプリケーションの作成 チャットアプリケーションの作成等に利用される ステータスバー (StatusBar) 通常 親フォームの下端に表示されるウィンドウで アプリケーションの各種ステータス情報の表示に使用される ActiveX コントロール ステータスバーコントロールは 文字列 及び ピクチャを含む Panel オブジェクト ( 最大 16 個 ) で構成され 通常 フォーム上のオブジェクトに関する情報 オブジェクトの構成要素に関する情報 オブジェクトの其の時に行える操作に関する情報等を表示する デザイン時には パネルを作成し ステータスバーコントロールの プロパティページ ダイアログボックスの パネル タブで各種値を設定して其の外観をカスタマイズする事が出来る TCP(Transmission Control Protocol) TCP プロトコルは コネクション型のプロトコルで有り 電話に例える事が出来る ユーザーは 接続を確立してから処理を行う必要が有る 亦 一旦接続が確立すると TCP プロトコルでは 接続が持続され 非常に大きなファイル等でもデータの完全性が保証されるが 多くのリソースが使用される UDP(User Datagram Protocol) UDP プロトコルは コネクションレス型のプロトコルで有り メモ伝言に例える事が出来る 1 台のコンピュータから別のコンピュータにメッセージが送られるが 両者は明示的に接続されて居ない 亦 各送信データの最大サイズは ネットワークに依り決まる -5-

プログラムリスト Option Explicit ' フォームが読み込まれた時の処理 Private Sub Form_Load( ) ' 自機の IP アドレス 名前を取得する txtaddressl.text = sckcom.localip txtnamel.text = sckcom.localhostname ' 入力必須項目を指示する txtaddressr.backcolor = RGB(255, 255, 128) txtportr.backcolor = RGB(255, 255, 128) ' 接続状況を表示する stainfo.panels(1).text = " 未接続 " ' コマンドボタン ( 設定 ) がクリックされた時の処理 Private Sub cmdset_click( ) ' ソケットが閉じて居ない場合は一旦閉じる If sckcom.state <> sckclosed Then sckcom.close ' サーバーの場合 If optserver.value = True Then Form1. = " チャット :TCP サーバー " ' ローカルポート ( 自分 ) のポート番号を設定する sckcom.localport = Val(txtPortL.Text) ' ソケットを作成し接続要求受付モードに移行する sckcom.listen ' ステータスを表示する stainfo.panels(1).text = " 接続受付中 " ' クライアントの場合 Else Form1. = " チャット :TCP クライアント " ' リモートホスト ( 相手 ) のアドレス 名前を設定する sckcom.remotehost = txtaddressr.text ' リモートポート ( 相手 ) のポート番号を設定する sckcom.remoteport = Val(txtPortR.Text) ' リモートコンピュータへの接続を要求する sckcom.connect ' ステータスを表示する stainfo.panels(1).text = " 接続要求中 " Do Until sckcom.state = sckconnected DoEvents Loop stainfo.panels(1).text = " 接続済 " End If LocalIP プロパティで自機の名前を LocalHostName プロパティで自機の IP アドレスを取得する事が出来る クライアント側が設定する必要の有る項目の背景色を黄色に仕て居る ステータスバーの Panels コレクションは 1 スタートで有る State プロパティでソケットの様々な状態を取得する事が出来る LocalPort プロパティには自機の使用ポートを指定する Listen メソッドは ソケットを作成し 接続要求を受け付けるモードに移行する RemoteHost プロパティには接続するコンピュータの名前か IP アドレスを指定する RemotePort プロパティには接続するポートを指定する Connect メソッドは リモートコンピュータへ接続を要求する 無限ループに陥ら無い為に DoEvents 関数で プログラムが占有して居る制御をオペレーティングシステムに渡す -6-

' リモートマシンが接続を要求して来た時の処理 Private Sub sckcom_connectionrequest(byval requestid As Long) ' サーバーで無い場合はプロシージャを抜ける If optserver.value = False Then Exit Sub ' リモートコンピュータの情報を表示する txtaddressr.text = sckcom.remotehostip txtportr.text = sckcom.remoteport ' ソケットを一旦閉じて新しい接続を受け付ける If sckcom.state <> sckclosed Then sckcom.close sckcom.accept requestid ' ステータスを表示する stainfo.panels(1).text = " 接続受入 -" & sckcom.remotehostip サーバー側而巳が必要とする処理で有る為 サーバーで無い場合は 直ちにサブプロシージャを抜ける RemoteHostIP プロパティでリモート機の IP アドレスを RemotePort プロパティでリモート機のポート番号を取得する事が出来る アンパサンド (&) は文字列を結合する演算子で有る ' コマンドボタン ( 送信 ) がクリックされた時の処理 Private Sub cmdsend_click( ) Dim S As String ' 送信テキストに改行を付加して送信する S = txtnamel.text & " > " & txtsx.text & vbcrlf sckcom.senddata S ' 送信テキストを一覧に表示する txtrx.text = txtrx.text & S txtsx.text = "" txtsx.setfocus ' データを受信した時の処理 Private Sub sckcom_dataarrival(byval bytestotal As Long) Dim S As String sckcom.getdata S txtrx.text = txtrx.text & S ' コマンドボタン ( 消去 ) がクリックされた時の処理 Private Sub cmdclear_click() txtrx.text = "" 此処で宣言した変数は宣言したサブプロシージャ内でしか値の参照と設定を行う事が出来ない vbcrlf は VB 定数で 改行を意味する SendData メソッドは データをリモートコンピュータに送信する DataArrival イベントは 新しいデータが送信されて来た時に発生する GetData メソッドは 現在のデータブロック ( 受信データ ) を取得し 其れを変数に格納する MultiLine プロパティを真に設定したテキストボックスは 32K 迄の入力が可能だが 時々消去して遣る事が望ましい -7-

' コマンドボタン ( 終了 ) がクリックされた時の処理 Private Sub cmdfinish_click( ) ' ソケットを閉じる If sckcom.state <> sckclosed Then sckcom.close ' プログラムをメモリから消去して終了する Unload Me End ' オプションボタン ( サーバー ) がクリックされた時の処理 Private Sub optserver_click( ) txtportl.backcolor = RGB(255, 255, 128) ' 入力必須項目を指示する txtaddressr.backcolor = RGB(255, 255, 255) txtportr.backcolor = RGB(255, 255, 255) ' オプションボタン ( クライアント ) がクリックされた時の処理 Private Sub optclient_click( ) txtportl.backcolor = RGB(255, 255, 255) ' 入力必須項目を指示する txtaddressr.backcolor = RGB(255, 255, 128) txtportr.backcolor = RGB(255, 255, 128) アプリケーションを終了する場合 ソケットは閉じてから終了する事が望ましい アプリケーションを終了する場合 正しくプログラムをメモリから消去して終了する事が望ましい TCP 接続で サーバー側が設定する項目は LocalPort プロパティだけで有る TCP 接続で クライアント側が設定する項目は RemoteHost プロパティと RemotePort プロパティで有る 算術演算子 比較演算子 論理演算子 1.^ 冪乗 1.= 等しい 1.Not 否定 2.- 負数 2.<> 等しくない 2.And 論理積 3.* / 乗算と除算 3.< より小さい 3.Or 論理和 4. 整数除算 4.> より大きい 4.Xor 排他的論理和 5.Mod 剰余 5.<= 以下 5.Eqv 同値 6.+ - 加算と減算 6.>= 以上 6.Imp 包合 算術演算子と論理演算子では 複数の演算子が使用されて居る場合には 頭に付けた番号の順序で演算が行われる ( 上に書かれて居る演算子程優先順位が高い ) -8-

Close メソッドに依るソケットのクローズ (Winsock) ソケットをクローズするメソッド Object.Close TCP 接続 又は 接続要求を受け付けて居るソケットを閉じる クライアントアプリケーションでもサーバーアプリケーションでも使用出来る オブジェクトには Winsock コントロールを指定する Listen メソッドに依る接続要求の待受 (Winsock) ソケットを作成し 接続要求を受け付けるモードに移行するメソッド Object.Listen TCP 接続に於いてソケットを作成し 接続要求を受け付けるモードに移行して クライアントからの接続要求を待ち受ける 此のメソッドは TCP 接続でしかし無い オブジェクトには Winsock コントロールを指定する 接続要求が送られて来ると ConnectionRequest イベントが発生する 接続を受け入れるには ConnectionRequest イベントのコード内で Accept メソッドを使用する必要が有る Connect メソッドに依る接続の要求 (Winsock) リモートコンピュータへの接続を要求するメソッド Object.Connect 引数 1, 引数 2 TCP 接続を確立する際に リモートコンピュータ ( サーバー側 ) への接続を要求する オブジェクトには Winsock コントロールを指定する 引数 1 には リモートコンピュータの名前を指定し 省略する事が出来る 引数 2 には リモートコンピュータのポートを指定し 省略する事が出来る Accept メソッドに依る接続要求の受入 (Winsock) 送られて来た接続要求を受け入れるメソッド Object.Accept 引数 TCP 接続に於いて クライアント側より送られて来た接続要求を受け入れる 此のメソッドは サーバー側の ConnectionRequest イベント内で而巳で使用する事が出来る オブジェクトには Winsock コントロールを指定する 引数 1 には RequestID(ConnectionRequest イベントの引数 ) を指定し 省略する事は出来ない -9-

SendData メソッドに依るデータの送信 (Winsock) データをリモートコンピュータに送信するメソッド Object.SendData 引数 引数で指定したデータをリモートコンピュータに送信する オブジェクトには Winsock コントロールを指定する 引数には 送信するデータ ( 数値 又は 文字列 ) を指定し 必ず指定する GetData メソッドに依るデータの受信 (Winsock) 現在のデータブロックを取得し変数に格納するメソッド Object.Bind 引数 1, 引数 2, 引数 3 リモートコンピュータより受信したデータを引数 1 で指定した変数に格納する オブジェクトには Winsock コントロールを指定する 引数 1 には 取得したデータを格納する変数を指定し 必ず指定する 引数 2 には 取得するデータの型を指定し 省略する事が出来る 引数 3 には 取得するデータのサイズを指定し 省略する事が出来る TCP 接続の確立の手順 サーバー側 クライアント側 LocalPort プロパティの設定 RemoteHost プロパティの設定 Listen メソッドの実行 ( 待受 ) RemotePort プロパティの設定 ConnectionRequest イベント Connect メソッドの実行 ( 接続要求 ) Accept メソッドの実行 ( 受付 ) -10-