tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: VB2010 internetsetoption
投稿日: 2015/04/15(Wed) 13:33
投稿者D
魔界の仮面弁士様、はじめまして。
返信頂きましてありがとうございます。
様々なところでお名前拝見しております。

> > 時代の流れに逆らえずVB2010を始めたばかりです。
> そうこうしている間に、VB2015 の足音がすぐソコに…!
> http://www.atmarkit.co.jp/ait/articles/1504/14/news011.html
耳が痛い限りです。。。

> > VB2010を使用してFTP通信を実装しております。
> > FTP通信はwininetを用いておりますが、
> 標準の FTPWebRequest クラスではなく、あえて WinInet API での通信なのですね?
> http://dobon.net/vb/dotnet/internet/ftpwebrequest.html
過去にVB6で作成した際にwinInetで客先HOSTとFTP通信していました。
今回も同じ客先との通信でしたので、オープン失敗時やコネクト失敗時等のフローを同じつくりにするために
今回もwinInetを選択しました。

> > 接続タイムアウトの設定方法がわかりません。
> WinInet の場合は InternetSetOption API、
> FtpWebRequest クラスなら Timeout プロパティかな?
今回はInternetSetOptionを使用してみました。
下記参照願います。


> > VB6の時はinternetsetoptionで設定できたかと思いますが、
> > 真似て記述してみても設定されていないようでした。
> だとしたら、どこかに変換ミスがあるのでしょう。
> どういう記述をしたのかが分からないので、そのミスを指摘することはできませんが…。
申し訳ありません。該当箇所を記載させていただきます。

////////////////////////////////////////////////////////////////////
    Public Const INTERNET_OPTION_CONNECT_TIMEOUT As Long = 2 '接続タイムアウト
    Public Const INTERNET_OPTION_RECEIVE_TIMEOUT As Long = 6 '受信タイムアウト
    Public Const INTERNET_OPTION_SEND_TIMEOUT As Long = 5   '送信タイムアウト
    Public Const INTERNET_OPTION_CONNECT_RETRIES As Long = 3 'リトライ回数

    Private Const USER_AGENT = "WININET"            'ユーザーエージェント名
    Private hOpen As IntPtr                         ' オープンハンドル
    Private hConnect As IntPtr                      ' コネクトハンドル

    Private Declare Auto Function InternetSetOption Lib "wininet.dll" _
        (ByVal hInternet As IntPtr, ByVal dwOption As Integer, _
         ByVal lpBuffer As IntPtr, ByVal lpdwBufferLength As Integer) As Boolean

    pOption :INTERNET_OPTION_CONNECT_TIMEOUT
    pValue  :5000
    Function FtpSetOption(pOption As Long, pValue As Long) As Boolean

        'ポ-トオープン
        hOpen = InternetOpen(USER_AGENT, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
        
        If hOpen = 0 Then
            FtpSetOption= False
        Else
            FtpSetOption = InternetSetOption(hOpen, pOption, pValue, LenB(pValue))
        End If  
    End Function

粗い抜粋ですがこのような感じです。
この後、ケーブルを抜いてコネクトさせ、
接続タイムアウト時間を計測しても5secではタイムアウトしませんでした。
なにかアドバイスあればお願い致します。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。