tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルWinsockでの接続拒否
記事No11308
投稿日: 2008/02/01(Fri) 17:18
投稿者コーヒーブレイク
いつも大変お世話になっています。

WindowsXPでのVB6にて作成したアプリでのサーバークライアントの
通信においてサーバー側がIP確認でエラーと判定して接続拒否を
した際にクライアント側で実行時エラーが発生してしまいます。
以下に抜粋になりますが、関係すると思われる部分のソースを簡略して
のせます。
注)VBのヘルプを参考にサーバー側はWinsockコントロールをコントロール
    配列にすることで複数接続を実現しています。

--- サーバー側 ----------------------------------------------------------
Private Sub Winsock_Sv_ConnectionRequest(Index As Integer, ByVal requestID As Long)

    If 接続要求受付可否フラグ = NG Then
        Exit Sub                                        ←[1]
    End If

    '=== 接続元判定 ===
    If StrComp(Winsock_Sv(Index).RemoteHostIP, 内部照合IPデータ) <> 0 Then
        Exit Sub                                        ←[2]
    End If

    '--- 接続要求受付 ---
    If Index = 0 Then
    Winsockコントロールのコントロール配列をLOADしAcceptする。
    End If
End Sub

--- クライアント側 -----------------------------------------------------
Private Sub Winsock_Ct_Connect()
    '=== ヘルスチェック初期送信 ===
    Winsock_Ct.SendData "007|HEALTH"                    ←[3]
End Sub


上記[3]で「実行時エラー'40006':指定したトランザクションまたは要求の
プロトコルまたは接続状態に問題があります。」というエラーが発生します。
サーバー側のソースにて同じようにExitさせても[1]では問題が発生せず、
[2]でこのエラーが発生することからStrCompした際にオブジェクトを
参照することによって自動的にConnect状態になっているのではと推測しています。

この推測が正しいのか、また正しいのであれば回避方法など少しでもアドバイス
いただけると助かります。
よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: Winsockでの接続拒否(クローズ)
記事No11321
投稿日: 2008/02/04(Mon) 09:47
投稿者コーヒーブレイク
解決ではないのですが、簡易テストアプリにて同様の動作を
させてみたところ現象は発生しなかったのでどこかにバグが
あると思われます。

掲示板を汚してしまいました、大変申し訳ありませんでした。

[ツリー表示へ]
タイトルRe^2: Winsockでの接続拒否(クローズ)
記事No11322
投稿日: 2008/02/04(Mon) 11:01
投稿者コーヒーブレイク
たびたびすみません。

簡易テストアプリでも再現していました。
結論から言うと、Winsockコントロールをコントロール配列にてListenすると
ConnectionReuestが発生した時点でクライアント側にはConnectイベントが
発生するみたいです。
通常(コントロール配列ではない1つ)でListenするとConnectionReuestが
発生した時点でクライアント側でConnectイベントが発生していないのを
確認しました。

ということでアプリの設計にて回避する必要があるみたいです。
ご報告までに。

[ツリー表示へ]
タイトルRe^2: Winsockでの接続拒否(クローズ)
記事No11323
投稿日: 2008/02/04(Mon) 11:05
投稿者
LocalPort プロパティ は 0  になっていますか?
確か 0にしてないとエラーが出る時があるような記憶があります

[ツリー表示へ]
タイトルRe^3: Winsockでの接続拒否(クローズ)
記事No11325
投稿日: 2008/02/04(Mon) 11:58
投稿者コーヒーブレイク
來さん、お返事ありがとうございます。

> LocalPort プロパティ は 0  になっていますか?
> 確か 0にしてないとエラーが出る時があるような記憶があります

はい、LocalPort=0の件は認識していますのでそのようにしています。
クライアント側のConnectイベント内でWinsockのステータスが
7(接続済み)から0(クローズ)へ変化しているのを確認していますので
おそらく前述のとおり仕様なのでは?と推測しています。

[ツリー表示へ]