2012年4月5日 星期四

101/4/5


伺服端


伺服端畫面
伺服Winsock1(0)
伺服Winsock1(1)

伺服Winsock1(2)


程式碼

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 2
    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(Index).Close
    cmdSend.Enabled = False
    Winsock1(0).Listen
  End If
 
End Sub

Clien端
Clien畫面

ClienWinsock1(1)

ClienWinsock1(2)

程式碼
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月29日 星期四

JAVA 與  VB、JAVA  互聯

JAVA Sever 
JAVA Client 
VB  Client 


首先必需先了解 Winsock的每一個state狀態下所代表之意義 

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

Server端 VB程式之撰寫

先撰寫簡單的 Winsock 網路程式

inital →  Command1
Bind →  Command2
Listen →  Command3
SentMSG →  cmdSend
State →  Command4

觀看state  Sever 端



程式碼

Option Explicit

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

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

Private Sub Command2_Click()
    Winsock1.Bind 7777, Winsock1.LocalIP
    Label3.Caption = Winsock1.State
End Sub

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

Private Sub Command4_Click()
    Label6.Caption = Winsock1.State
End Sub

Private Sub Command5_Click()
    Winsock1.Close
    Label7.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


觀看state   Client  端
程式碼


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

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

Private Sub cmdSend_Click()
  Winsock1.SendData txtOutput.Text
  DoEvents
  Label2.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 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月15日 星期四

101/03/16

程式設計工藝大師




簡而言之,TCP 提供的是一個可靠的資料流傳送服務:相對而言,UDP 提供的是一個非可靠的非連線型(connectionless)的資料流傳送服務。 http://www.study-area.org/network/network_ip_tcp.htm




sever  與client 端執行畫面
 sever端等待


sever程式碼

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.47"  '設定改成您 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月2日 星期五

101/03/03

UDP-1



Option Explicit

Private Sub Form_Load()
  With udpPeerA
    '重要:必須將 RemoteHost 的值
    '修改為電腦的名稱或IP位址。
    .Protocol = sckUDPProtocol
    .RemoteHost = "163.25.4.0"  '搷主機IP
    .RemotePort = 2001   '連線的連接埠號。
    .Bind 2002        '連結到本機的連接埠。
  End With
  frmPeerB.Show         '顯示第二個表單。
End Sub

Private Sub txtSend_Change()
  '在鍵入文字時,立即將其傳送出去。
  udpPeerA.SendData txtSend.Text
End Sub

Private Sub udpPeerA_DataArrival _
(ByVal bytesTotal As Long)
  Dim strData As String
  udpPeerA.GetData strData
  txtOutput.Text = strData
End Sub

UDP-2




Option Explicit

Private Sub cmdConnect_Click()
   With udpPeerA
    .RemoteHost = txtHostName.Text
    If chkMain.Value Then
      .RemotePort = 1001   '連線的連接埠號。
      .Bind 1002        '連結到本機的連接埠。
    Else
      .RemotePort = 1002
      .Bind 1001
    End If
  End With
End Sub

Private Sub cmdSend_Click()
  udpPeerA.SendData txtSend.Text
  DoEvents
End Sub

Private Sub udpPeerA_DataArrival(ByVal bytesTotal As Long)
  Dim strData As String
  udpPeerA.GetData strData
  txtOutput.Text = strData
End Sub


2012年3月1日 星期四

101/03/01


101/3/1
物件 object
實例 來自於類別
類別 class
屬性 property
事件 EVENT
行為 behavior
方法 method
上帝依照形象造人



import javax.swing.*;

import java.awt.event.*;  // 要處理事件必須 import 此套件
public class Exe extends JFrame
implements ActionListener {
    /**
     * @param args
     */
    //int act = 0;     // 用來記錄按鈕被次數的變數
    int SizeW = 500;
    int SizeH = 500;
      public static void main(String[] args) {
          Exe test = new Exe();
      }
      // 用建構方法來建立元件、將元件加入視窗、顯示視窗
      public Exe() {
        setTitle("許峻榮");    // 設定視窗標題
        //新增物件
        JButton mybutton = new JButton("變胖了");
        JButton mybutton1 = new JButton("變瘦了");
        JCheckBox abc_box = new JCheckBox("aaa");
        JRadioButton aaa = new JRadioButton("bbb");
//----         
        mybutton.setSize(100, 100);
        mybutton1.setSize(150, 150);
        abc_box.setSize(350, 350);
        aaa.setSize(150, 150);
        // 通知按鈕物件:本物件要當傾聽者
        mybutton.addActionListener(this);  
        getContentPane().add(mybutton);
        getContentPane().add(mybutton1);
        getContentPane().add(abc_box);
        getContentPane().add(aaa);         
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(SizeW,SizeH);
        setVisible(true);
      }
      public void actionPerformed(ActionEvent e) {
          SizeW = SizeW *2;
          SizeH = SizeH *2; 
          setSize(SizeW,SizeH);
      }
}