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


Posted by 떼르미
,


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