○VB6 TCP/IP
メニューから、プロジェクト→コンポーネントにて
Microsoft Winsock Control 6.0
を参加させます。
Winsockコントロールをフォームに貼り付けます
■TCPクライアントの一連の流れ
@,接続
Winsock1の各種パラメータを設定して
Winsock1.connectにて接続します
Private Sub Winsock1_Connect()イベントが来て実際に接続されるまで待機します
A,文字列の送信
Winsock1.SendData(" ") 文字列を送信します
Private Sub Winsock1_SendComplete()イベントが来て実際に送信完了するまで待機します
B,文字列の受信
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)イベントが来たら文字を受信します
C,ポートのクローズ
Winsock1.Close
(注意)アプリケーション実行時に接続、送受信する場合は
フォームのLoadイベントで接続、送受信すると、うまく動作しないことがありますので
Initializeの所で接続、送受信をします
Private Sub Form_Initialize()
Call connect
End Sub
■TCPクライアント------------------------------------------------------------
'フォーム上にWinsockコントロールを貼り付けます。
'ロード時から接続します。
Private Sub Form_Load()
Call connect
End Sub
'接続します アドレス:localhost ポート:1000 プロトコル:TCP/IP
Private Sub connect()
Winsock1.Close
Winsock1.Protocol = sckTCPProtocol
Winsock1.RemoteHost = "localhost"
Winsock1.RemotePort = 1000
Winsock1.connect
'Do While (Winsock1.State > 0 And Winsock1.State < 7) '接続もしくは切断されるまで待機
' DoEvents
'Loop
End Sub
'文字列の送信
Private Sub Command1_Click()
Winsock1.SendData ("123ABCabcいなば")
End Sub
'文字列の受信
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim buff As String
Winsock1.GetData buff
Debug.Print (buff)
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)
Winsock1.Close
MsgBox ("err") '先にクローズしないとエラーイベントがどんどん来ます
End Sub
'クローズして切断されるまで待機 文字列を送信完了する前に切断するとエラーが発生します
Private Sub OffLine()
Winsock1.Close
Do While Not (Winsock1.State = sckClosed) '切断されるまで待機
DoEvents
Loop
End Sub
■TCPサーバー----------------------------------------------------------------
'フォーム上にWinsockコントロールを貼り付けます。
'起動時から待機させます。
Private Sub Form_Initialize()
Winsock1.Protocol = sckTCPProtocol
Winsock1.LocalPort = 1000
Call SockListen
End Sub
'接続を待機します ポート:1000 プロトコル:TCP/IP
Private Sub SockListen()
Winsock1.Close
Winsock1.Listen
End Sub
'接続されました。
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close
Winsock1.Accept (requestID)
End Sub
'文字列を受信しました。送受信開始します。
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim buff As String
Winsock1.GetData buff '文字列を受信
Debug.Print buff
Winsock1.SendData ("123ABCabcいなば") '文字列を送信開始(SendCompleteイベントが来るまで送信中)
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)
Call SockListen
End Sub
'切断されました、再び待機します
Private Sub Winsock1_Close()
Call SockListen
End Sub
'送信完了イベント(文字を送信後切断)
'Private Sub Winsock1_SendComplete()
' Call SockListen
'End Sub