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

2012年3月28日 星期三

2012/03/29

JAVA TCP連線

Server端

畫面截圖

Client端

畫面截圖

VB JAVA連線時 VB畫面

VB TCP連線

sckClosed = 0 --缺省值,關閉。
SckOpen = 1 --打開。
SckListening = 2 --偵聽
sckConnectionPending = 3 --連結掛起
sckResolvingHost = 4 --識別主機。
sckHostResolved = 5 --已識別主機
sckConnecting = 6 --正在連結。
sckConnected = 7 --已連結。
sckClosing = 8 --同級人員正在關閉連結。
sckError = 9 --錯誤

TCP-Server

程式碼

Option Explicit

Private Sub cmdSend_Click()
  Winsock1.SendData txtSend.Text
  Label2.Caption = Winsock1.State
End Sub

Private Sub Command1_Click()
Winsock1.Bind 7777, Winsock1.LocalIP
Label2.Caption = Winsock1.State
End Sub

Private Sub Command2_Click()
Label2.Caption = Winsock1.State
End Sub

Private Sub Command3_Click()
Winsock1.Listen
Label2.Caption = Winsock1.State
End Sub

Private Sub Command4_Click()
Winsock1.Close
Label2.Caption = Winsock1.State
End Sub

Private Sub Command5_Click()
Label2.Caption = Winsock1.State
End Sub

Private Sub Form_Load()
  'Winsock1.LocalPort = 7777
  'Winsock1.Listen  '監聽
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  Dim strData As String
  Winsock1.GetData strData, vbString
  txtReceived.Text = strData
  If strData = "close" Then
    Winsock1.Close
    cmdSend.Enabled = False
    Winsock1.Listen
  End If
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
  Winsock1.Close
  Winsock1.Accept requestID  '改成接受
  cmdSend.Enabled = True
End Sub



截圖
Bind →  Command1
initial → Command2
Listen →  Command3
Close →  Command4
State →  Command5


TCP-Client

程式碼


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

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

Private Sub cmdSend_Click()
  Winsock1.SendData txtOutput.Text
  DoEvents
  Label1.Caption = Winsock1.State
End Sub

Private Sub Command1_Click()
Winsock1.LocalPort = 0
Label1.Caption = Winsock1.State
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 Label2_Click()
nd Sub

Private Sub Label3_Click()

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



截圖



連線 →  cmdconnect
傳送 →  cmdSend
停止 →  cmdExit

2012年3月15日 星期四

2012/03/15


TCP

優點 : 傳送可靠,程式可省略可靠機制。

缺點 : 但是速度比較慢。

UDP

優點 : 傳輸量大﹐迅速。
缺點 : 不可靠,程式或需自行提供可靠機制。


socket連線基本流程

TCP連線-VB
TCP server監聽



Server端

Option Explicit

Private Sub cmdSend_Click()
  Winsock1.SendData txtSend.Text
End Sub

Private Sub Form_Load()
  Winsock1.LocalPort = 7777
  Winsock1.Listen  '監聽
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  Dim strData As String
  Winsock1.GetData strData, vbString
  txtReceived.Text = strData
  If strData = "close" Then
    Winsock1.Close
    cmdSend.Enabled = False
    Winsock1.Listen
  End If
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
  MsgBox "敲敲"                             '跳出提示視窗
  Winsock1.Close
  Winsock1.Accept requestID  '改成接受
  cmdSend.Enabled = True
End Sub



CLIENT端

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