SystemInfo.dat파일에 IP와 PORT정보를 저장해둔 다음 그것을 읽어서 설정한다.
이후 동작은 아래의 글에서 설명한 대로 기본적인 Socket통신규약에 따라 진행된다.
핵심 : Client는 Listen상태로 대기중인 Server에만 Connect할 수 있는데 Server에서 Accept하면 연결이 성공되면서 Connect이벤트가 발생한다. 이후 보낼때는 Send로 직접 전송하고, 받을 때는 DataArrival이벤트(Server에서 Send할 때 발생됨)에서 처리한다. 연결을 끊을 때는 close로 먼저 끊을 수도 있고 상대편에서 끊길 때 발생하는 close이벤트에서 처리할 수도 있다.
Option Explicit
Dim readl As String
Dim rHost, rPort, lPort As String
Const FileSpec = "D:\Projects\VBs\SystemInfo.dat"
Private Sub Command1_Click()
If Winsock1.State = 0 Then
Command1.Caption = "Send"
Winsock1.Connect
Else
Winsock1.SendData Text1.Text
Text2.AddItem Text1.Text
End If
End Sub
Private Sub Command2_Click()
Debug.Print "Close단추 누름 : " & Winsock1.State
Winsock1.Close
Debug.Print "소켓 닫음 : " & Winsock1.State
Command1.Caption = "Connect"
Winsock1.Protocol = sckTCPProtocol
Winsock1.RemoteHost = rHost
Winsock1.RemotePort = CLng(lPort)
End Sub
Private Sub Form_Load()
Dim FSO As FileSystemObject
Dim ts As TextStream
On Error Resume Next
Set FSO = New FileSystemObject
Set ts = FSO.OpenTextFile(FileSpec, ForReading)
If Err.Number = 0 Then
Do While (ts.AtEndOfStream = False)
readl = ts.ReadLine
If InStr(readl, "[RemoteHost]") Then
readl = ts.ReadLine
rHost = readl
End If
If InStr(readl, "[RemotePort]") Then
readl = ts.ReadLine
rPort = readl
End If
If InStr(readl, "[LocalPort]") Then
readl = ts.ReadLine
lPort = readl
End If
Loop
End If
On Error GoTo 0
If Trim(rHost) = "" Then
rHost = "127.0.0.1"
End If
If Trim(rPort) = "" Then
rPort = "9000"
End If
If Trim(lPort) = "" Then
lPort = "2000"
End If
Set ts = Nothing
Set FSO = Nothing
Winsock1.Protocol = sckTCPProtocol
Winsock1.RemoteHost = rHost
Winsock1.RemotePort = CLng(lPort)
End Sub
Private Sub Winsock1_Close()
Text2.AddItem "접속이 종료되었습니다."
Winsock1.Close
Command1.Caption = "Connect"
Winsock1.Protocol = sckTCPProtocol
Winsock1.RemoteHost = rHost
Winsock1.RemotePort = CLng(lPort)
End Sub
Private Sub Winsock1_Connect()
Text2.AddItem "접속되었습니다."
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim buf As String
Winsock1.GetData buf
If Trim(buf) = "[close]" Then
Winsock1.Close
End If
Text2.AddItem buf
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 Number & " : [" & Description & "](" & Scode & ")(" & Source & ")" & Chr(13) & Chr(10) & "(" & HelpFile & ")(" & HelpContext & ")(" & CancelDisplay & ")"
End Sub
'Tech: > ASP·VB6' 카테고리의 다른 글
MTS와 COM+에서의 Transaction (0) | 2008.06.26 |
---|---|
VB-Winsock 소스3 (Gateway) (0) | 2008.06.26 |
VB-Winsock 소스1 (Server) (0) | 2008.06.26 |
VB-WinSock컨트롤을 이용한 Socket통신 (0) | 2008.06.26 |
MCP 70-176 VB6.0 Desktop 시험후기 (0) | 2008.06.26 |