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

