2012年4月11日 星期三

2012/04/12


Dim s(2), a(2) As Integer
Dim st(2), totalstr As String
Private Sub Command1_Click(Index As Integer)

If Index = 0 Then

s(Index) = s(Index) + 1
a(Index) = s(Index) Mod 2

Select Case a(Index)
Case 0

Shape1(2).FillColor = QBColor(10)
Label2.Caption = a(Index)
st(Index) = 0
Case 1
Shape1(2).FillColor = QBColor(12)
Label2.Caption = a(Index)
st(Index) = 1
End Select

ElseIf Index = 1 Then
s(Index) = s(Index) + 1
a(Index) = s(Index) Mod 2

Select Case a(Index)
Case 0

Shape1(1).FillColor = QBColor(10)
Label2.Caption = a(Index)
st(Index) = 0
Case 1
Shape1(1).FillColor = QBColor(12)
Label2.Caption = a(Index)
st(Index) = 1
End Select

ElseIf Index = 2 Then
s(Index) = s(Index) + 1
a(Index) = s(Index) Mod 2

Select Case a(Index)
Case 0

Shape1(0).FillColor = QBColor(10)
Label2.Caption = a(Index)
st(Index) = 0
Case 1
Shape1(0).FillColor = QBColor(12)
Label2.Caption = a(Index)
st(Index) = 1
End Select

End If
totalstr = st(0) + st(1) + st(2)
Label1.Caption = totalstr
End Sub

2012年4月4日 星期三

2012/04/05

VB TCP 多人連線

Server端
IP :  192.168.15.46
Client端
IP :  192.168.15.47、192.168.15.48

Server端

截圖



winsock設定





程式碼


Option Explicit

Private Sub cmdSend_Click()

  Dim i As Long
  For i = 1 To 2
    Winsock1(i).SendData txtSend.Text
  Next

End Sub

Private Sub Form_Load()
  Winsock1(0).LocalPort = 7777
  Winsock1(0).Listen  'Winsock1(0)負責監聽 Clien1=Winsock1(1)  Clien2=Winsock1(2)
End Sub

Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)

    Dim i As Long
    For i = 1 To 4
    If Winsock1(i).State = sckClosed Then
    Winsock1(i).Accept requestID
    List1.AddItem "Local Port=" + Str(Winsock1(i).LocalPort) + " RemotePort = " + Str(Winsock1(i).RemotePort)
    Exit For
    End If
    Next
 
  cmdSend.Enabled = True
End Sub

Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)

  Dim strData As String
  Winsock1(Index).GetData strData, vbString
  txtReceived.Text = strData

  If Index = 1 Then
   Winsock1(2).SendData txtReceived.Text    '接收到來至Clien1的資料送到Clien2
  Else
   Winsock1(1).SendData txtReceived.Text    '接收到來至Clien2的資料送到Clien1
  End If
 
  If strData = "close" Then
    Winsock1(1).Close
    cmdSend.Enabled = False
    Winsock1(0).Listen
  End If
 
End Sub



Client端

截圖


IP與port設定



程式碼


Private Sub cmdConnect_Click()
  Winsock1.LocalPort = 0   '以便自動產生Local Port
  Winsock1.Connect "192.168.15.46"  '設定改成您 Server 電腦的IP 號碼
End Sub

Private Sub cmdExit_Click()
  Winsock1.SendData "close"
  DoEvents
  Winsock1.Close
  Winsock1.LocalPort = 0
End Sub

Private Sub cmdSend_Click()
  Winsock1.SendData txtOutput.Text
  DoEvents
End Sub

Private Sub Form_Load()
  Winsock1.RemotePort = 7777  '設定與Server端做Listen的Port相同
End Sub

Private Sub Form_Unload(Cancel As Integer)
If Winsock1.State <> sckClosed Then
   cmdExit_Click
End If
End Sub

Private Sub Winsock1_Connect()
If Winsock1.State = sckConnected Then
   lstInput.AddItem "Connected! LocalPort =" & Winsock1.LocalPort _
                    & " RemptePort = " & Winsock1.RemotePort
End If
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  Dim mydata As String
  Winsock1.GetData mydata, vbString
  lstInput.AddItem mydata
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)
  lstInput.AddItem Description
End Sub