タイトル : 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ではタイムアウトしませんでした。 なにかアドバイスあればお願い致します。 |