elObject.SelLength = Len(SelObject.Text)
End Sub
(2)服务器端程序的编写:
1、新建一个 VB 工程,添加两个 Winsock 控件(Winsock1 用来监视指定端口,以确定客户端程序是否与自己发生连接,Winsock2 用来实现与客户端程序的对话),程序设计界面如图2所示。
2、现在切换到代码编辑窗口,依次写入以下代码:
①用 Winsock1 来监视指定的端口
Option Explicit
Private Sub Form_Load()
Me.Caption = Winsock1.LocalIP
Winsock1.RemoteHost = Winsock1.LocalIP `要连接的远程计算机的名称,这里是设置为本地机器的名称
Winsock1.LocalPort = 3721 `设置需要监视的端口,要和客户机的一样
Winsock1.Listen `将其设置为监听状态
End Sub
⑵用 Winsock2 来实现与客户端程序的对话
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long) `当远程计算机请求连接时出现
If Winsock2.State <> sckClosed Then Winsock2.Close
Winsock2.Accept requestID
End Sub
Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long) `当新数据到达时出现
Dim PauseTime, Start As Long
Dim getinfo As String
Winsock2.GetData getinfo, vbString `取得客户端程序发过来的信息
Select Case CStr(getinfo)
Case "Call" `如果为 “Call”,则把本身的 IP 地址发送回客户机(这个客户机就可以对本机进行控制了)
Winsock2.SendData "OK!*" & Winsock1.LocalIP
Case "Restart" `接受客户机命令,进行重新启动
` Shell ("rundll.exe user.exe,exitwindowsexec") ‘在调试程序时先注释到,先用关闭自身的程序来测试吧
Unload Me
End Select
`大家可以在服务端的程序中,设计许多的操作,如查找、删除、新建文件等等的操作,并一一定义,这样在接受到客户端发过来的信息后,可以进行各类不同的操作
End Sub
四、 补充说明:
为了使用程序容易理解,我没有对 Winsock 控件进行动态的控制。
(1)在客户端的程序中:如在自定义函数 SearchComputer 中如果连接上服务器端的程序后,就因该再动态新增一个 Winsock 控件,进行接着的操作,保存原来的以便需要对服务器端进行操作时使用,而不会在 (注意1)进行再次连接
(2)在服务器端的程序中:如果有一个用户连接就因该至少有两个 Winsock 控件,如果有两个用户同时连接,则要有三个 Winsock 控件,依次类堆,因此也需要动态新增 Winsock 控件。
五、 程序完成:
希望大家读完本程序,对 Winsock 控件有更深的了解,希望大家对远程控制类(冰河)类软件有更深的了解,本程序在 PWIN2000+VB6.0 下编辑完成,在 Pwin98、Pwin2000+局域网 上运行正常。