タイトル | : VB6でのクライアントの接続確認と再送信処理について |
記事No | : 15790 |
投稿日 | : 2013/08/15(Thu) 10:40 |
投稿者 | : shym |
'VB6のPC1(クライアント)とPC2(サーバ)でTCP/IPのソケット通信をしています。 プログラムは、PC1のクライアントです。 質問 1,クライアントの接続確認処理で失敗したらエラー表示が出るのですが形としては、判定処理は、次のような形で問題ないでしょうか? 2,送信に失敗した時の処理、要するに再送信処理についての判定処理は、次のような形で問題ないでしょうか? 問題がある場合、普通は、どのように考えるのでしょうか。
Public Sub OpenSocket(ByVal blnChange As Boolean) On Error GoTo OpenSokcet_Error If gstrRemoteUse = "未使用" Or blnChange = False Then Exit Sub If WinsockMeasResult.State <> sckClosed Then If blnChange = True Then WinsockMeasResult.Close End If End If If WinsockMeasResult.State <> sckConnected Then WinsockMeasResult.Protocol = sckTCPProtocol WinsockMeasResult.RemoteHost = gstrRemoteIpAddress WinsockMeasResult.RemotePort = gintRemotePortNo WinsockMeasResult.Connect
Do While ((WinsockMeasResult.State > 0 And WinsockMeasResult.State < 7)) '接続もしくは切断されるまで待機 If TimerSocketTimeOut.Enabled = False Then TimerSocketTimeOut.Enabled = True End If If gblnSocket_TimeOut = True Then Exit Do End If DoEvents Loop End If Exit Sub OpenSokcet_Error: Call DispError(Err.Description, "ソケットオープン", "測定") Resume Next End Sub
'●●●●● ソケットクローズ ●●●●● Public Sub CloseSocket() On Error GoTo CloseSokcet_Error ' If WinsockMeasResult.State = sckConnected Then ' WinsockMeasResult.Close ' End If ' WinsockMeasResult.Close Do While Not (WinsockMeasResult.State = sckClosed) '切断されるまで待機 DoEvents Loop Exit Sub CloseSokcet_Error: Call DispError(Err.Description, "ソケットクローズ", "メインフォーム") Resume Next End Sub
'文字列の受信 Private Sub WinsockMeasResult_DataArrival(ByVal bytesTotal As Long) Dim buff As String WinsockMeasResult.GetData buff If gstrRemoteUse = "使用" And Mid(buff, 1, 3) = "GET" Then '最新の測定結果送信 WinsockMeasResult.SendData (gstrSocket_MeasResult) End If End Sub
Private Sub WinsockMeasResult_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) 'エラー On Error GoTo WinsockMeasResult_Error Dim intReturn As Integer WinsockMeasResult.Close If Description = "ホストへの経路がありません。" Or _ Description = "タイム アウトのため接続できませんでした。" Or _ Description = "接続が受け付けられませんでした。" Then intReturn = MsBoxSocket("リモートシステムへの接続に失敗し" + vbCrLf + "ました。ネットワークの設定、リモ" + vbCrLf + "ートホストの起動確認、ケーブル" + vbCrLf + "の断線確認をして下さい。", vbCritical, "ソケット通信エラーメッセージ") End If If Description = "タイムアウトまたは他の問題によって、接続が中断されます。" Then intReturn = MsBoxSocket("リモートシステムへの送信に失敗し" + vbCrLf + "ました。ネットワークの設定、リモ" + vbCrLf + "ートホストの起動確認、ケーブル" + vbCrLf + "の断線確認をして下さい。データ" + vbCrLf + "を再送しますか?", vbCritical + vbYesNo, "ソケット通信エラーメッセージ") If intReturn = vbYes Then ' OpenSocket (True) ' '再送信 ' WinsockMeasResult.SendData (gstrSocket_MeasResult) End If End If Exit Sub WinsockMeasResult_Error: Call DispError(Err.Description, "ソケットクローズ", "メインフォーム") Resume Next End Sub
'1000msec Private Sub TimerSocketTimeOut_Timer() TimerSocketTimeOut.Enabled = False gblnSocket_TimeOut = True End Sub
|