首先,新建一工程,名為Server,新建一個(gè)窗體,Name為Server,在窗體中加入一個(gè)winsock控件,Name設(shè)為sckServer,協(xié)議設(shè)為默認(rèn)的TCP/IP協(xié)議。
接下來(lái)我們回來(lái)Server窗體模塊中,添加如下代碼:
Private Sub form_Load()
With Me
.sckServer.LocalPort = 88917'本地端口(呵呵!我的生日?。?BR> .sckServer.Listen '開始監(jiān)聽
End With
End Sub
'接受客戶端的連接請(qǐng)求。
Private Sub sckServer_ConnectionRequest(ByVal requestID As Long)
With Me
If .sckServer.State <>sckClosed Then .sckServer.Close
.sckServer.Accept (requestID)
End With
End Sub
下面我們來(lái)建立客戶端程序:新建一個(gè)工程,名為Client,把窗體名為Client,在上面加入一個(gè)winsock控件,名為sckClient,協(xié)議為TCP/IP協(xié)議。再加一個(gè)按鈕cmdConnect在窗體模塊中加入代碼:
Private Sub form_Load()
With Me
.sckClient.RemoteHost = "127.0.0.1"'設(shè)置遠(yuǎn)程IP,本例設(shè)為本機(jī)。
.sckClient.RemotePort = 88917 '遠(yuǎn)程端口,就為server中的設(shè)置一樣.
End With
End Sub
Private sub cmdConnect_Click()
SckClient.Connect
End sub
至此,單擊Connect按鈕我們的兩個(gè)工程已經(jīng)可以進(jìn)行通信了,但看不見,你可以在Client中的sckClient_Connect事件中加入代碼:debug.print “Connetion successful!”來(lái)查看。
這僅是第一步,一點(diǎn)工作也做不了,下面我們來(lái)為它們添加功能。為了簡(jiǎn)單,本文章只實(shí)現(xiàn)一點(diǎn)小小的功能―――關(guān)機(jī),重啟,注銷。好,開始吧!
在Server工程中新建一個(gè)模塊,Name為modApi,這個(gè)??鞛橐恍〢PI函數(shù),添加如下API函數(shù):
Public Declare Function ExitWindowXXX Lib "user32" Alias "ExitWindowXXX" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Public Const EWX_LOGOFF = 0
Public Const EWX_REBOOT = 2
Public Const EWX_SHUTDOWN = 1
Public Declare Function ClipCursor Lib "user32" Alias "ClipCursor" (lpRect As Any) As Long
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
注:在兩個(gè)socket中編程中,進(jìn)行通信的重要事件是DataArrival事件,用于接收遠(yuǎn)程數(shù)據(jù)。
接下來(lái)我們回來(lái)Server窗體模塊中,添加如下代碼:
Private Sub form_Load()
With Me
.sckServer.LocalPort = 88917'本地端口(呵呵!我的生日?。?BR> .sckServer.Listen '開始監(jiān)聽
End With
End Sub
'接受客戶端的連接請(qǐng)求。
Private Sub sckServer_ConnectionRequest(ByVal requestID As Long)
With Me
If .sckServer.State <>sckClosed Then .sckServer.Close
.sckServer.Accept (requestID)
End With
End Sub
下面我們來(lái)建立客戶端程序:新建一個(gè)工程,名為Client,把窗體名為Client,在上面加入一個(gè)winsock控件,名為sckClient,協(xié)議為TCP/IP協(xié)議。再加一個(gè)按鈕cmdConnect在窗體模塊中加入代碼:
Private Sub form_Load()
With Me
.sckClient.RemoteHost = "127.0.0.1"'設(shè)置遠(yuǎn)程IP,本例設(shè)為本機(jī)。
.sckClient.RemotePort = 88917 '遠(yuǎn)程端口,就為server中的設(shè)置一樣.
End With
End Sub
Private sub cmdConnect_Click()
SckClient.Connect
End sub
至此,單擊Connect按鈕我們的兩個(gè)工程已經(jīng)可以進(jìn)行通信了,但看不見,你可以在Client中的sckClient_Connect事件中加入代碼:debug.print “Connetion successful!”來(lái)查看。
這僅是第一步,一點(diǎn)工作也做不了,下面我們來(lái)為它們添加功能。為了簡(jiǎn)單,本文章只實(shí)現(xiàn)一點(diǎn)小小的功能―――關(guān)機(jī),重啟,注銷。好,開始吧!
在Server工程中新建一個(gè)模塊,Name為modApi,這個(gè)??鞛橐恍〢PI函數(shù),添加如下API函數(shù):
Public Declare Function ExitWindowXXX Lib "user32" Alias "ExitWindowXXX" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Public Const EWX_LOGOFF = 0
Public Const EWX_REBOOT = 2
Public Const EWX_SHUTDOWN = 1
Public Declare Function ClipCursor Lib "user32" Alias "ClipCursor" (lpRect As Any) As Long
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
注:在兩個(gè)socket中編程中,進(jìn)行通信的重要事件是DataArrival事件,用于接收遠(yuǎn)程數(shù)據(jù)。

