WinsockのError処理

解決


しゅう  2003-10-25 05:43:48  No: 79994

下記のコードでリモートの準備ができていない時に、
起動させて何もしないで待っていると40秒後位にWinsock1_Errorが検出されます。
しかし、起動後にCommand2をクリックしてメッセージボックスを1分位表示させた後に、
メッセージボックスを消しても、Winsock1_Errorは検出されないで、
いつまで経ってもWinsock1.State=6(接続処理中)のままです。

Winsock1_Errorイベント以外にもエラー処理は必要でしょうか?
また、必要だとすればどの様なエラー処理を行なえば良いでしょうか?

よろしくお願いします。

' Form1 

Option Explicit

Private Sub Form_Load()
    Winsock1.Protocol = sckTCPProtocol
    Winsock1.RemoteHost = "192.168.1.1"
    Winsock1.RemotePort = 8192
    Winsock1.LocalPort = 0
    Winsock1.Connect
End Sub

Private Sub Command1_Click()
    Unload Me
End Sub

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
    MsgBox "WinsockエラーNo. = " & Number & vbCrLf & Description & vbCrLf & "終了します。"
    Unload Me
End Sub

Private Sub Command2_Click()
    MsgBox Winsock1.State
End Sub


  2003-10-27 00:35:22  No: 79995

Errorイベント内に以下の処理を追加したらどうでしょう…

If Winsock1.State <> sckClosed Then
    Winsock1.Close     '切断
End If

もちろん、 Form_Unload時には、ソケットをCloseしないといけないですね


しゅう  2003-10-27 17:30:09  No: 79996

悠さん返答ありがとうございます。
上記追加しましたが、状況は変化しませんでした。
Errorイベントは発生しているが、
メッセージボックスを表示している時には、
Errorイベントを取り逃がしている様な感じがします。
どうしてかというと、フォーム起動後にCommand2でメッセージボックスを表示させて、
さらに時計を表示させているとフォーム起動後40秒後位に時計が一瞬とまるからです。
Errorイベントはこんな仕様なのでしょうか?


やまごろ  2003-10-27 19:33:27  No: 79997

あー、取り逃がしてるかもしれませんね。MSCOMMのイベントもmsgbox開いてたら来ませんし。まあ、バッチ(オンラインに対する意)処理ではmsgboxは使わないのが無難だと思いますが。ユーザに知らせる必要があればステータスバー、無ければログ、というところでしょうかね。


しゅう  2003-10-27 21:06:24  No: 79998

やまごろさん返答ありがとうございます。
msgbox起動中にはErrorイベントを取り逃がすみたいなので、
それを考慮して作成したいと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加