Visual Basic5.0以降用 TCP/IP通信モジュール version 0.03
概要:このモジュールは、MSWINSCK.OCX が無くてもTCP/IP通信ができるように
することを目的に作成されました。OCXは便利ですが、レジストリに登録されて
いなかったりバージョンが古かったりすると役に立たないので、ソースプログラムに
直接追加できるようにOCX化は行なっていません。
なお、プロトコルはTCPのみです。UDPには対応していません。
操作方法:TCPSock.cls と TCPSock.bas をプロジェクトに追加してください。
関数リスト:以下の関数をサポートしています。
グローバル関数
Function StartUpWindow() As Boolean
Windowsソケットを初期化します。
必ず他の関数を呼び出すより前に実行してください。
戻り値が False の場合は、ソケットを使えません。
戻り値が True だった場合は、プログラム終了前に CleanUpWindow() を呼び出して
ください。
Function CleanUpWindow() As Boolean
Windowsソケットを終了します。
プログラム終了前には必ず呼び出してください。
この関数を呼ばずにプログラムを終了すると、VBが「不正な処理」で強制終了
してしまう危険があります。
Function ErrorMsg(ByVal ErrorCode As Long) As String
エラーメッセージを取得します。
エラーコードは GetLastError() で取得できます。
Function GetHostByNameAlias(ByVal strHostName As String) As Long
ホスト名からIPアドレスを取得します。
失敗すると INADDR_NONE(&HFFFFFFFF)が返ります。
Function GetHostNameByAddr(ByVal lngHostIP As Long) As String
IPアドレスからホスト名を取得します。
lngHostIP が INADDR_LOCALHOST(&H7F000001)の場合は、長さ0の文字列を返します。
メンバ関数
イベント
CloseTCP(Index As Integer)
相手のソケットが閉じられた時に発生します。
ConnectTCP(Index As Integer)
Connect メソッドが完了した時に発生します。
ConnectionRequest(Index As Integer, ByVal requestID As Long)
クライアントからの接続要求が届くと発生します。
DataArrival(Index As Integer, ByVal BytesTotal As Long)
データが届くと発生します。
Error(Index As Integer, ByVal Number As Long)
エラーが発生した時に発生します。エラーメッセージは、ErrorMsg(Number) で
取得できます。
メソッド
Sub Duplicate(MaxCount As Integer)
ソケットの配列を作成します。例えば、MaxCount = 10 の場合、Index には
0 から 9 までを指定してください。1つしか使わない場合は、MaxCount = 1 として、
Index = 0 を指定してください。
Function Accept(Index As Integer, ByVal requestID As Long) As Boolean
Close 状態のソケットに対して、接続要求を受け入れます。
requestID には、ConnectionRequest イベントで渡される requestID を使って
ください。
成功すると True が返ります。
Function Bind(Index As Integer, ByVal LocalPort As Long) As Boolean
ソケットを指定されたポートにバインドします。
成功すると True が返ります。
通常は、サーバー側だけが利用します。
Listen() を呼び出す前に、Bind() する必要があります。
Sub CloseTCP(Index As Integer)
ソケットを閉じます。
Function GetTextData(Index As Integer, BUFFER$, ByVal ReadByte As Long) As Long
受信バッファのデータをテキスト(Unicode文字列)データとして
読み込みます。
Function PeekTextData(Index As Integer, BUFFER$, ByVal ReadByte As Long) As Long
受信バッファのデータをテキストデータとして読み込みます。
読み込んだデータは受信バッファから削除されません。
Function GetBinaryData(Index As Integer, BUFFER$, ByVal ReadByte As Long) As Long
受信バッファのデータをバイナリ(バイト配列)データとして読み込みます。
Function PeekBinaryData(Index As Integer, BUFFER$, ByVal ReadByte As Long) As Long
受信バッファのデータをバイナリデータとして読み込みます。
読み込んだデータは受信バッファから削除されません。
Function Listen(Index As Integer) As Boolean
サーバーがクライアントからの接続要求が届くのを待つようにします。
事前に Bind() でポートを指定しておく必要があります。
成功すると True が返ります。
接続要求が届くと、ConnectionRequest イベントが発生します。
Function SendBinaryData(Index As Integer, BUFFER$) As Boolean
バイナリデータを送信します。
成功すると True が返りますが、その時点でデータが相手方に届いたわけでは
ありません。
Function SendTextData(Index As Integer, SendText$) As Boolean
テキストデータを送信します。
成功すると True が返りますが、その時点でデータが相手方に届いたわけでは
ありません。
Function Connect(Index As Integer) As Boolean
クライアント側からサーバー側へ接続要求を送ります。
予めサーバーのホスト名またはIPアドレスとポート番号を RemoteHost および
RemotePort に設定しておく必要があります。
成功すると True が返りますが、接続は完了していません。
接続が完了すると、Connect イベントが発生します。
また、State() の戻り値が sckConnected になったかどうかでも判断できます。
プロパティ
GetLastError(Index As Integer) As Long
最後のエラーのエラーコードを取得します。
エラーが無ければ0が返ります。
GetHandle(Index As Integer) As Long
ソケットのハンドルを取得します。
戻り値が SOCKET_ERROR(&HFFFFFFFF) の時は無効なハンドルです。
BytesReceived(Index As Integer) As Long
受信バッファに溜まっているデータのサイズを返します。
BytesRemaining(Index As Integer) As Long
送信バッファに残っているデータのサイズを返します。
LocalHostName As String
ローカルホストの名前を返します。
ローカルホストの名前は設定できません。
LocalIP As String
ローカルホストのIPアドレスを XXX.XXX.XXX.XXX の形の文字列で返します。
ローカルホストのIPアドレスは設定できません。
LocalPort(Index As Integer) As Long
ローカルポートプロパティの値を取得/設定します。
RemotePort(Index As Integer) As Long
リモートポートプロパティの値を取得/設定します。
State(Index As Integer) As Integer
現在の状態を取得します。「接続状態を示す定数」の中のどれかが返ります。
RemoteHost(Index As Integer) As String
リモートホストプロパティの値を取得/設定します。
RemoteHostIP(Index As Integer) As String
リモートホストのIPアドレスを XXX.XXX.XXX.XXX の形の文字列で返します。
接続中でないと正しい結果を返しません。
グローバル変数
CallBackSocket As Collection
コールバックを受け取るために使います。サンプルプログラムを参照してください。
定数リスト:以下の定数が利用できます。ほとんどは MSWINSCK.OCX と同じです。
接続状態を示す定数
sckClosed 0 '(既定値) 閉じています。
sckOpen 1 '開いています。
sckListening 2 '接続要求を待っています。
sckConnectionPending 3 '接続がペンディング状態になっています。
sckResolvingHost 4 'ホストの解決処理中です。
sckHostResolved 5 'ホストの解決が完了しました。
sckConnecting 6 '接続処理中です。
sckConnected 7 '接続が完了しました。
sckClosing 8 '相手側のマシンが接続を閉じようとしています。
sckError 9 'エラー。
エラーを示す定数(エラーの意味については、ソースの中の ErrorMsg() 関数を
参照してください。すべてのエラーコードに対応しているわけでは
ありません。)
sckOpCanceled
sckInvalidArgument
sckWouldBlock
sckInProgress
sckAlreadyComplete
sckNotSocket
sckMsgTooBig
sckPortNotSupported
sckAddressInUse
sckAddressNotAvailable
sckNetworkSubsystemFailed
sckNetworkUnreachable
sckNetReset
sckConnectAborted
sckConnectionReset
sckNoBufferSpace
sckAlreadyConnected
sckNotConnected
sckSocketShutdown
sckTimedout
sckConnectionRefused
sckNotInitialized
sckHostNotFound
sckHostNotFoundTryAgain
sckNonRecoverableError
sckNoData
sckHostUnreachable
sckInvalidOp
サンプルについて:
サンプルとして、簡単なチャットプログラムを用意してあります。
注意:
このソースはフリーで使っていただいて構いません。
このソースを利用することによって発生した損害に対して、作者は一切責任を
取れません。
バグがあった場合は、作者までご一報くださると嬉しいです。
また、バージョンアップ・バグ情報の通知が必要な方も、作者までご一報
ください。
http://hp.vector.co.jp/authors/VA022513/
a5497108@anet.ne.jp PANDA
履歴:
2000/12/18 version 0.01 を公開しました。
2001/02/15 ホームページ移転のためドキュメントを一部修正しました。
2001/03/27 ホームページ移転のためドキュメントを一部修正しました。
2001/03/31 version 0.02 を公開しました。
配列化して、コメントを追加しました。
2002/01/27 version 0.03 を公開しました。
Accept() 内で、イベントを登録するのを忘れていたバグを
修正しました。
戻る