在VB5中利用Winsock和msDNS控件进行

2008-04-09 04:40:53来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

一.认识Winsock和msDNS控件
  首先我们要认识Winsock控件,Winsock控件是微软提供的,是win98的内部控件,利用 WinSock 控件可以与远程计算机建立连接,Winsock包含有用户数据文报协议 (UDP)和传输控制协议 (TCP)。可用这两种协议来建立客户与服务器应用程序来进行数据交换。而msDNS是个人编写的共享控件,需要的可到(wch_email@163.net)联系。Winsock是进行数据交换的,msDNS是用来查找对方的IP地址。
二.Winsock的基础
  1.TCP基础:TCP(Transfer Control Protocol)是传输控制协议的简称,是基于连接的协议,在数据传输之前必须先建立连接。

  2.UDP基础: UDP(User Data Protocol)是用户数据文报协议的简称,两台计算机之间的传输类似于传递邮件;两者之间没有明确的连接,可作为服务器,也可作为客户机。

3.属性:

BytesReceived:返回接收到的(当前在接收端缓冲区内的)数据的数量。使用GetData方法来获取数据。

LocalHostName:返回本地机器名。

LocalIP:返回本地机器的IP地址。

LocalPort:返回或者设置所用到的本端口;如果指定的是端口 0,就使用一个随机端口。

Protocol:返回或设置Winsock所用的协议是TCP或UDP。

RemoteHostIP:返回远程机器的IP地址。

State:返回控件的状态,用枚举类型来表示。

SocketHandle:返回一个与连接字句对应的值。 4.方法:

Listen:用于服务器程序,等待客户访问。
格式:Winsock对象.listen

Connect:用于向远程主机发出连接请求
格式:Winsock对象.connect [远程主机IP,远程端口]

Accept:用于接受一个连接请求
格式:Winsock对象.accept Request ID

Senddata: 此方法用于发送数据
格式:Winsock对象.senddata 数据

Getdata: 用来取得接收到的数据
格式:Winsock对象.getdata 变量 [,数据类型 [,最大长度]]

Close: 关闭当前连接
格式:Winsock对象.close

5.事件:

DataArrival:新数据到达时出现;获取一个 GetData 调用中的全部数据。

ConnectionRequest:当远程计算机请求连接时接受连接请求。

SendComplete :在完成一个发送操作时出现 。

SendProgress :在发送数据期间出现 。
Error:后台处理中出现错误( 纾??邮О埽?蛘咴诤筇ㄊ辗⑹?菔О埽┦录?突岢鱿帧?

Close :当远程计算机关闭连接时出现。
三.程序代码:
  通过远程控制计算机,使远程计算机重新启动或关闭,需设置一个服务器程序和一个客户机程序,服务器受客户机的控制。

1.服务器程序:

  在VB5的编程环境下,新建一个工程,在Form1中添加一个Winsock控件,Winsock的“名称"为Winsock1,属性Protocol设置为0-sckTCPProtocol,Form1的属性Visible=False,这样运行该程序就会隐藏起来不可见;其代码如下:

Option Explicit

"该函数(ExitWindowsEx)是win98里的API函数,是用来重启或关闭计算机的

Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4
Const EWX_POWEROFF = 8
Const EWX_RESET = EWX_LOGOFF EWX_FORCE EWX_REBOOT

Private Sub Form_Load()
 On Error GoTo skip "如此端口出现冲突程序则退出
 Winsock1.LocalPort = 1334 "端口值应大于1024,如还有冲突可改为其他值
 Winsock1.Listen
Exit Sub
skip:
If Err.Number = 10048 Then
 MsgBox "端口冲突,退出!", vbOKOnly, "注意!"
End
End If
End Sub

Private Sub Winsock1_Close()
 If Winsock1.State $#@60;$#@62; sckClosed Then Winsock1.Close
 Winsock1.Listen "关闭连接后继续监听
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
 If Winsock1.State $#@60;$#@62; sckClosed Then Winsock1.Close
 Winsock1.Accept requestID "请求到达时,接受连接
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim dwReserved As Long
Dim strget As String
Dim X As Long
Dim ccom As String
 Winsock1.GetData strget "读取到达的数据
 Select Case strget
  Case "Reset" "判断到达的数据是否‘Reset’,是则重启
   X = ExitWindowsEx(EWX_RESET, dwReserved)
  Case "Close" "如为‘Close’则关闭计算机
   X = ExitWindowsEx(EWX_SHUTDOWN, dwReserved)
  Case Else "可以在此加入其他命令
 End Select
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)
 MsgBox "错误", vbOKOnly, "注意!" "如程序出现错误,则退出
End
End Sub

2.客户机程序:

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:用VB编写Flash图像浏览器

下一篇:用VB将Html转换为文本文件