SystemInfo.dat파일에 IP와 PORT정보를 저장해둔 다음 그것을 읽어서 설정한다.
이후 동작은 아래의 글에서 설명한 대로 기본적인 Socket통신규약에 따라 진행된다.
핵심 : Server는 무조건 Listen상태로 대기하면서 ConnectionRequest이벤트가 발생(클라이언트에서 Connect할 때)하면 Accept하면서 연결이 성공된다. 이후 보낼때는 Send로 직접 전송하고, 받을 때는 DataArrival이벤트(클라이언트에서 Send할 때 발생됨)에서 처리한다.
Option Explicit
Dim readl As String
Dim rPort As String
Const FileSpec = "D:\Projects\VBs\SystemInfo.dat"
Private Sub Command1_Click()
If Command1.Caption = "Listen" Then
Winsock1.LocalPort = rPort
Winsock1.Listen
Command1.Caption = "Send"
Else
Winsock1.SendData Text1.Text
Text2.AddItem Text1.Text
End If
End Sub
Private Sub Command2_Click()
Debug.Print "Close단추 누름 : " & Winsock1.State
Winsock1.Close
Command1.Caption = "Listen"
Debug.Print "소켓 닫음 : " & Winsock1.State
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, "[RemotePort]") Then
readl = ts.ReadLine
rPort = readl
End If
Loop
End If
On Error GoTo 0
If Trim(rPort) = "" Then
rPort = "9000"
End If
Set ts = Nothing
Set FSO = Nothing
Winsock1.Protocol = sckTCPProtocol
End Sub
Private Sub Winsock1_Close()
Text2.AddItem "접속이 종료되었습니다."
Command1.Caption = "Listen"
Winsock1.Close
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Accept requestID
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim buf As String
Winsock1.GetData buf
If Trim(buf) = "[close]" Then
Winsock1.Close
Command1.Caption = "Listen"
End If
Text2.AddItem buf
End Sub
'Tech: > ASP·VB6' 카테고리의 다른 글
MTS와 COM+에서의 Transaction (0) | 2008.06.26 |
---|---|
VB-Winsock 소스3 (Gateway) (0) | 2008.06.26 |
VB-Winsock 소스2 (Client) (0) | 2008.06.26 |
VB-WinSock컨트롤을 이용한 Socket통신 (0) | 2008.06.26 |
MCP 70-176 VB6.0 Desktop 시험후기 (0) | 2008.06.26 |