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


Posted by 떼르미
,


자바스크립트를 허용해주세요!
Please Enable JavaScript![ Enable JavaScript ]