做完了这些准备工作,就可以开始着手编写代码了。 在Form窗口上点击鼠标右键,选择查看代码,并在代码窗口中输入如下代码: Private Sub Form_Load() Winsock1.RemoteHost = "对方计算机名" '如果想通过对方IP连接的话,请把上面一行改为Winsock1.RemoteHostIP="对方IP"。 Winsock1.RemotePort = 1001 '可以任意填写,最好在1000以上 End Sub Private Sub cmdconnect_Click() Winsock1.Connect '连接主机 Cmdcommand.Enabled=True '将cmdcommand按钮设为有效 cmdconnect.Enabled = False End Sub Private Sub cmdCommand_Click() Dim CommandMain As String CommandMain = InputBox("请输入命令:", "命令窗口") Winsock1.SendData CommandMain '向服务器端发送数据 End Sub 看到这里应该祝贺你,你已经完成了客户端的编写。不要这麽吃惊,真的就这麽简单。当然前面已经说过,这种程序是由两部分组成的,所以光学会做客户端还不够。你还必须要编写一个服务器端来接受并执行客户端所发出的命令,否则的话你所发出的命令就会"一去兮,不复返也"。 编写服务器端的程序前,必须明确的是:你到底要服务器端计算机做什麽?我们假定要服务器端计算机在接受到reboot命令后重启计算机,接受到shutdown命令后关闭计算机,接受到logoff命令后注销计算机、接收到close命令后退出本程序以及接受到其他命令后默认为Message消息。为此我们必须用到Exitwindowsex这个api函数,这个函数的具体用法会在下面说明。 好了,明确了目的后,我们要做的就是开始着手编写代码了。请先将前面编好的客户端程序编译后保存,然后建立新工程,加入一个Winsock1控件,并将控件的Protocol属性设为SckTcpProtocol。同客户端一样进入代码窗口加入如下代码: '************************************************************************* Private Const EWX_LOGOFF = 0 Private Const EWX_REBOOT = 2 Private Const EWX_SHUTDOWN = 1 Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByValdwReserved As Long) As Long '************************************************************************* '以上部分为api函数的声明部分,请不要做任何修改。 Private Sub Form_Load() Winsock1.LocalPort = 1001 '注意这里的设置一定要和客户端中Winsock1.RemotePort所使用的端口一致,否则将无法使用。 Winsock1.Listen '将1001端口状态设为监听状态 End Sub Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long) '处理错误如果有错误发生则跳过错误 On Error Resume Next If Winsock1.State <> sckClosed Then '如果State状态为sckClosed,则关闭Winsock连接。 Winsock1.Close End If Winsock1.Accept requestID '接受连接 '处理错误如果有错误发生则报告出错提示 If Err Then MsgBox Error End If End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) '以下部分为定义的简单协议 Dim strdata As String Winsock1.getdata strdata '获取客户端发出的命令 Select Case strdata Case "reboot" '当strdata的值为reboot时重新启动计算机,以下几条代码的作用以此类推。 ExitWindowsEx EWX_REBOOT, 0 Case "shutdown" ExitWindowsEx EWX_SHUTDOWN, 0 Case "logoff" ExitWindowsEx EWX_LOGOFF, 0 Case "close" end Case Else MsgBox strdata, vbInformation, "消息" End Select End Sub Private Sub Form_Unload(Cancel As Integer) Winsock1.Close '关闭程序时断开连接 End Sub 我做了改动,让控制很多机器,可总不成功,请高手帮忙,告诉我该怎么改!谢谢 很容易呀!服务器端不用修改,你要控制的没台计算机都要运行服务器端程序;需要改变的是客户端,只需要添加一个TEXTBOX控件textbox1,用来输入控制的计算机名称,将Winsock1.RemoteHost = "对方计算机名" Winsock1.RemotePort = 1001 代码改为Winsock1.RemoteHost = textbox1.textWinsock1.RemotePort = 1001 并将其移至cmdconnect_Click()子程序 的首部,然后去掉Form_Load()子程序如:Private Sub cmdconnect_Click() Winsock1.RemoteHost = textbox1.textWinsock1.RemotePort = 1001 Winsock1.Connect '连接主机 Cmdcommand.Enabled=True '将cmdcommand按钮设为有效 cmdconnect.Enabled = False End Sub

评论