第5章.ppt

大学计算机网络实验教程-刘兵-课件PPT

收藏

资源目录
跳过导航链接。
压缩包内文档预览:(预览前20页/共144页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:21836122    类型:共享资源    大小:16.76MB    格式:ZIP    上传时间:2019-09-06 上传人:QQ24****1780 IP属地:浙江
25
积分
关 键 词:
大学 计算机网络 实验 试验 教程 刘兵 课件 ppt
资源描述:
大学计算机网络实验教程-刘兵-课件PPT,大学,计算机网络,实验,试验,教程,刘兵,课件,ppt
内容简介:
计算机网络实验教程,武汉工业学院 刘兵 等制作,第5章 网络编程,学习要点: Visual Basic语言的基本编程方法 网络聊天程序的编制方法 Winsock控件的使用方法 网络数据包的捕获及分析方法,5.1.1 注释与分行,1. 注释 注释是非可执行语句,只是对有关的内容加以说明。例如:说明某个过程或函数的功能以及入口和出口参数。 在程序中添加注释是个良好的编程习惯。 在 Visual Basic.NET中,注释以Rem或撇号开始(注意:以Rem开始的注释是单独的语句,必须另起一行或用冒号与前面的语句分开)。,Rem 这是一句注释 Rem 这是另一句注释 formula = 10 撇号之后的任何文本也是注释 formula = 20 : Rem 这也是一句注释 注释可以出现在公式文本之后,1 .注释,可采用行继续符将一条语句写在两行或多行上。 将多个语句合并到一行(例如,在您有几个短语句而又想节省空间的时候)。在模块内组织变量或命令时使用此项功能也很方便。,2 . 分行与续行,将单个语句拆分为多行,在要拆分行的地方使用行继续符,即由一个空格和一条下划线组成(如“ _”)。以下示例中的语句被拆分出三个带行继续符的行: Data1.RecordSource = _ “SELECT * FROM Titles, Publishers“ _ & “WHERE Publishers.PubId = Titles.PubID“ _ & “AND Publishers.State = CA“,用冒号(:)将各语句分开,如以下示例所示: str1 = “Hello“ : Red = “Red“ : str1 = str1 & Red,将多个语句置于同一行,5.1.2 常量与变量,在程序执行过程中数值始终不改变的变量称为常量。常量分为系统常量和用户自定义常量两种。 1. 系统常量 系统常量是系统预先定义好的常量,可以在任何脚本中使用,不受作用域与可见性的限制。,表5-2 表示空值的常用常量,表5-1 布尔常量,表5-3 颜色常量,表5-4 日期常量,获取系统今天时间,获取系统当前日期: System.DateTime.Today 获取系统当前日期和时间: System.DateTime.Now,2. 用户自定义常量,声明常数后,就不能修改它或为它分配新值。可以在过程内或在模块、类或结构的声明部分声明常数。 定义常量的形式如下: Const As 类型 = 常量值 As子句是可选的,用来说明常量的数据类型,如果省略,则数据类型由表达式决定。,常量值可以是数字、字符串或由它们与运算符组合成的简单表达式。例如: Public Const DaysInYear = 365 (类型?) Private Const WorkDays = 250 编译器为常数分配数据类型。,2. 用户自定义常量,当Option Strict为On时,必须通过指定数据类型来显式的声明常数。 当 Option Strict 为 Off 时,编译器为常数分配数据类型。,2. 用户自定义常量,如下所示: Option Strict On Public Const MyInteger As Integer = 42 Private Const DaysInWeek As Short = 7 Protected Friend Const Funday As String = “Sunday“,2. 用户自定义常量,3 变量,变量是指在程序执行过程中其值可以变化的量。 变量通过一个名字(变量名)来标识。 系统为程序中的每一个变量分配一个存储单元。 变量名实质上就是计算机内存单元的命名。因此,借助变量名就可以访问内存中的数据了。,1.变量命名规则,VB.NET要求必须遵循以下规则: 变量名必须以字母或下划线()开头。 变量名必须只包含字母、十进制数字和下划线。 如果名称以下划线开头,则必须包含至少一个字母或十进制数字。 变量名不能与系统保留的关键字相同。 变量名长度不能超过16383个字符 变量名在变量的有效范围内必须是惟一的。 变量名不区分大小写(或者说对大小写不敏感),2. 变量的数据类型,变量的数据类型决定了如何将变量的值存储到计算机的内存中。 例如,某个变量的数据类型为整型(存放整数),但是如果在代码中将一个字符串赋给该变量,则运行程序时会出现类型不能转换的错误。,3. 变量的声明与赋值语句,(1)变量的声明 程序运行时,变量声明在内存中为变量分配空间,并使系统了解随后要处理数据的数据类型。变量声明的语句形式如下: Dim 变量名 As 数据类型 初值,3. 变量的声明与赋值语句,例如: Dim i As Integer = 100 Dim j As Double 先声明一个变量,然后再赋值 j = 3.14 当给变量赋值后,根据所赋的值,系统会自动调整变量的类型。例如: Dim str1 此时所定义的str1变量为Object类型 Str1 = “student”,(2)赋值语句,赋值语句执行赋值运算。简单的赋值运算包括采用运算符右侧的值并将其赋予左侧的变量,如下列示例中所示: x = 42 运算符右侧的值可以是任何文本、变量、表达式或返回值的函数调用,如下列示例中所示: x = y + z + MyFunction(3),(2)赋值语句,赋值运算符还可将值赋予 String 变量和 String 表达式,如下列示例中所示: Dim x As String x = “String variable assignment“ x = “Con“ & “cat“ & “enation“,5.1.3 运算符与表达式,1 . 算术运算符 算术运算符用于组合数字、数值变量、数值字段和数值函数以得到另一个数字。用于连接运算表达式的各种算术运算符。,表5-6 算术运算符,赋值运算符 赋值运算符用于赋值运算。,比较运算符 比较运算符用于比较两个对象之间的相互关系,返回值为True和False。,表5-9 显示 pattern 中允许的字符和这些字符的匹配项,下列示例使用 Like 运算符将字符串与模式比较。结果是 Boolean 值,它表示该字符串是否符合该模式。下面的返回值是: Dim myCheck As Boolean myCheck = “F“ Like “F“ myCheck = “aBBBa“ Like “a*a“ myCheck = “F“ Like “A-Z“ myCheck = “F“ Like “!A-Z“ myCheck = “a2a“ Like “a#a“ myCheck = “aM5b“ Like “aL-P#!c-e“ myCheck = “BAT123khg“ Like “B?T*“ myCheck = “CAT123khg“ Like “B?T*“,逻辑运算符 逻辑运算符的作用是对操作数进行逻辑运算。操作数可以是逻辑量(True或False)或关系表达式。逻辑运算的结果也是一个逻辑量。,下面是一些示例: Dim x As Boolean x = Not 23 12 x = False. x = Not 23 67 x = True. x = 23 12 And 12 4 x = True x = 12 23 And 12 4 x = False x = 23 12 Or 4 12 x = True x = 23 45 Or 4 12 x = False x = 23 45 Xor 12 4 x = True x = 23 12 Xor 12 4 x = False x = 12 23 Xor 4 12 x = False,字符串运算符,1. & 运算符 & 运算符生成两个表达式的字符串连接。格式: result = expression1 & expression2 如果 expression1 或 expression2 的数据类型不是 String,则被转换为 String。result 的数据类型为 String。 例如: Dim myStr As String myStr = “Hello“ & “ World“,字符串运算符,2. +运算符 将两个数相加。 也用于连接两个字符串。,运算符优先级,5.1.4 数组,数组允许您通过同一名称引用一系列的变量,并使用一个称为“索引”或“下标”的数字来进行区分。 数组可以是一维也可以是多维数组。 在数组的每一维中,数组元素按下标0到该维最高下标值连续排列。,声明数组变量,1. 声明单维数组变量 Dim MySingleArray(3) As Integer Dim MyArray(3) As Integer =1,5,7,12 声明一个一维数组,同时对数组赋值 2. 声明多维数组变量 在声明中,在变量名后添加一对圆括号并将逗号置于圆括号中以分隔维数,如下例所示: Dim My2DArray(3,2) As Integer Dim My2DArray(3,2) As Integer =2,4,1,3,5,6 声明一个二维数组,同时对其进行初始化,数组的用法,可以声明数组用来处理一组具有相同数据类型的值。 一个数组就是一个包含许多单元(用于存储值)的变量,而标量类型的变量(不是数组)只有一个存储单元,只能存放单个值。 当要引用数组所包含的所有值时,可以将数组作为一个整体来引用;也可以一次引用一个单独的数组元素。,Sub sum() Dim A(10) As Integer Dim I As Integer For I = 0 to 10 A(I) = I Next I End Sub,如果数组的类型是Object,则可以在数组中混合使用各种数据类型。下面的示例使用了数组变量EmployeeData来存储雇员的信息。 Dim EmployeeData(3) As Object EmployeeData(0) = “Ron Bendel“ EmployeeData(1) = “4242 Maple Blvd“ EmployeeData(2) = 48 EmployeeData(3) = “06-09-1953“,数组的用法,Dim I, J As Integer Dim MatrixA(9, 9) As Double Dim MaxDim0, MaxDim1 As Integer 定义获取数组某一维的最大下标值变量 MaxDim0 = MatrixA.GetUpperBound(0) 获得一维的最大下标值 MaxDim1 = MatrixA.GetUpperBound(1) 获得二维的最大下标值 For I = 0 To MaxDim0 For J = 0 To MaxDim1 MatrixA(I, J) = (I * 10) + J Next J Next I,5.1.5 程序设计的方法,分支语句 使用在称之为分支结构的特殊语句块中的条件表达式控制了程序中哪些语句被执行以及以什么样的次序执行。 在VB.NET中选择语句又可分为两种:If语句和Select Case语句,1. If语句,If语句可以在条件为真时执行一系列语句,而在条件不为真时执行其他一系列语句。 最简单的If . Then分支结构可以只写在一行: If 条件表达式为真 Then 语句 例如: If Score= 20 Then str1 = “You Win!“,If 条件表达式为真 Then 语句块1 ELSE 语句块2 END IF,1. If语句,If 条件表达式1为真 Then 语句块1 Elseif 条件表达式1为真 Then 语句块2 Elseif 条件表达式3为真 Then 语句块3 Else 语句块n END IF,Dim Number, Digits As Integer Number = 53 If Number 10 Then Digits = 1 ElseIf Number 100 Then Digits = 2 Else Digits = 3 End If 结果:Digits= .,2. Select Case语句,Select Case结构的语法: Select Case Variable Case Value1 当Value1与Variable的值匹配时执行的语句 Case Value2 当Value2与Variable的值匹配时执行的语句 Case Value3 当Value3与Variable的值匹配时执行的语句 Case Else 当没有值与Variable的值匹配时执行的语句 End Select,Dim Number As Integer = 8 Dim Str1 As String Select Number Case 1 To 5 Str1 = “Between 1 and 5“ Case 6, 7, 8 Str1 = “Between 6 and 8“ Case 9 To 10 Str1 = “Greater than 8“ Case Else Str1 = “Not between 1 and 10“ End Select,Select Case Age Case Is 100 Str1 = “长寿者!“ Case Else Str1 = “这是一个多好的年龄阶段“ End Select,循环语句,循环语句用于在一定条件下多次重复执行一组语句。可以根据下列条件重复执行语句:直到条件为真、直到条件为假、指定的次数或为集合中的每个对象执行一次。Visual Basic 支持的循环结构包括: For.Next For Each.Next While Do.Loop,1. For.Next,For counter = start To end Step step 被执行的语句块 Next counter ,Sub Preset(ByRef A() As Integer) Dim I As Integer For I = 1 To UBound(A) A(I) = 128 Next I End Sub,Sub TwosTotal() Dim J, Total As Integer For J = 2 To 10 Step 2 Total = Total + J Next J End Sub,Sub NewTotal() Dim N, Total As Integer For N = 16 To 4 Step -2 Total = Total + N Next N End Sub,2. For Each.Next,For Each.Next 循环类似于 For.Next 循环,但它为集合中的每个元素执行语句块,而不是执行指定次数。语法如下所示: For Each elementvariable In collection 被执行的语句块 Next elementvariable ,Sub Preset(ByRef A() As Integer) Dim Elt As Integer For Each Elt In A Elt = 128 Next Elt End Sub,3. Do语句,(1)当条件为 True 时重复执行语句 使用 While 关键字检查 Do 循环中的条件有两种方法: 在进入循环前检查条件 在循环至少运行一次后检查条件。 在条件保持为 True 时循环会继续下去。,Sub CheckWhileFirst() Dim counter as integer = 0 Dim number as integer = 10 Do while number 6 Number = number - 1 Counter = counter + 1 Loop End sub,Sub CheckWhileLast() Dim counter as integer = 0 Dim number as integer = 5 Do Number = Number - 1 Counter = Counter + 1 Loop While Number 6 End Sub,Sub CheckUntilFirst() Dim counter as integer = 0 Dim number as integer = 20 Do until number = 15 Number = number - 1 Counter = counter + 1 Loop End sub,Sub CheckUntilLast() Dim counter as integer = 0 Dim number as integer = 20 Do Number = Number - 1 Counter = Counter + 1 Loop Until Number = 15 End Sub,Sub ExitDoExample() Dim Counter As Integer = 0 Dim Number As Integer = 8 Do Until Number = 10 If Number 0 Then Exit Do Number = Number - 1 Counter = Counter + 1 Loop End Sub,Sub CheckWhile() Dim Counter As Integer = 0 Dim Number As Integer = 10 While Number 6 Number = Number - 1 Counter = Counter + 1 End While End Sub,Sub ExitWhileExample() Dim counter as integer = 0 Dim number as integer = 8 While number 10 If number 0 then exit while Number = number - 1 Counter = counter + 1 End while End sub,5.1.6 Visual Basic函数与过程,5.6.1 基本概念 在程序中,有些处理需要经常重复进行,这些处理的代码是相同的,只不过每次都以不同的参数调用,这时就可把这些代码制作成函数与过程。函数可以返回值,而过程则不返回任何值,这就是函数与过程的根本区别。例如,要计算整数1到n的累加过程,n的大小可以由用户决定,因此它是不确定的。这样就可以定义一个以n为参数的过程,为了得到不同n时的累加结果,以不同的参数n调用该过程就可以了。使用过程的好处就在于使得程序简练,同时也便于程序的设计与维护。 1. Sub 过程 Sub 过程是包含在 Sub 语句和 End Sub 语句中的一系列 Visual Basic 语句。每次调用过程时都执行过程中的语句,从 Sub 语句后的第一个可执行语句开始,到遇到的第一个 End Sub、Exit Sub 或 Return 语句结束。,5.6 函数与过程,5.6.1 基本概念 函数可以返回值,而过程则不返回任何值,这就是函数与过程的根本区别。 使用过程的好处就在于使得程序简练,同时也便于程序的设计与维护。,(1)声明 Sub 过程,声明 Sub 过程的语法如下所示: 可访问性 Sub subname(argumentlist) Sub过程所执行的语句 End Sub,(2)调用语法,调用 Sub 过程的语法如下所示: Call subname(参数列表),以下是子程序示例: Sub ComputeArea(ByVal Length As Double, ByVal Width As Double) Dim Area As Double If Length = 0 Or Width = 0 Then Exit Sub 立即退出过程. End If Area = Length * Width 计算Area response.write(Area) 输出结果 End Sub 典型的ComputeArea调用如下所示: Call ComputeArea(10.1 , 200.5),2. Function过程,Function 过程与 Sub 过程相似,但它还向调用程序返回值。 Function 过程可以带呼叫代码传递给它的参数,如常数、变量或表达式。,(1)声明Function过程,声明 Function 过程的语法如下所示: 可访问性 Function 过程名(参数列表) As 数据类型 Function过程的语句. End Function,(2)返回值,Function 过程发送回调用程序的值称为它的“返回值”。函数使用以下两种方式之一返回值: 它在过程的一个或多个语句中给自己的函数名赋值。直到执行了 Exit Function 或 End Function 语句,控制才返回给调用程序,如下面的示例所示: Function sum(i,j) As Integer . Return ( i + j ) 指定返回值 . End Function,(3)调用语法,调用 Function 过程的方法是将其名称和参数放在赋值语句的右边或表达式中。 lvalue = functionname(argumentlist) If (functionname(argumentlist) / 3) = expression) Then . 例如调用上面定义的sum函数的方法是: total = sum(12 , 24 ),VB.NET的常用函数,1. 字符串函数 字符串函数用于对字符串进行处理和操作。,表5-12 常用的字符串函数,下面是字符串函数应用的一些例子。 Dim MyString As String Dim MyLen As Integer Dim Str1 As String MyString = “Hello World“ MyLen = Len(MyString) Str1 = Left(myString, 5) Str1 = Right(myString, 6) MyString = “Mid Function Demo“ Str1 = Mid(MyString, 1, 3) 返回值为“Mid“. Str1 = Mid(MyString, 14, 4) Str1 = Mid(MyString, 5),MyString =“XXpXXpXXPXXP“ Str1 = “P“ str1 = InStr(4, MyString, str1, CompareMethod.Text) MyString = “Shopping List“ Str1= Replace(MyString, “o“, “i“) MyString = “ABCDEFG“ Str1= StrReverse(myString),2. 日期函数,下面是日期函数应用的一些例子。 Dim MyDate As Date Dim MyValue As Integer MyDate = #9/20/2003# MyValue = Microsoft.VisualBasic.Day(MyDate) MyValue = Month(MyDate) MyValue = Year(MyDate) MyValue = Weekday(MyDate),3. 类型转换函数,4. 其他函数,下面是这些函数应用的一些例子。 Dim UpperCase, LowerCase As String Uppercase = “Hello World 1234“ Lowercase = LCase(UpperCase) Dim MyArray(4), YourArray(3) As Integer Dim MyString As String Dim MyCheck As Boolean,5.1.7 Visual Basic程序设计的事件,5.2.1 Winsock规范,通信的基础是套接字,一个套接字包括一个IP地址(32bit)和一个端口号(16bit)共48bit,套接字是指通信的一端,套接字可以根据通信性质分类,这种性质对于用户是可见的,且应用程序一般仅在同一类的套接字间通信。套接字有两种不同的类型:流套接字和数据报套接字。,5.2.1 Winsock规范,(1)流套接字 流套接字提供双向的、有序的、无重复并且无记录边界的数据流服务,它适用于处理大量数据。网络传输层可以将数据分散或集中到合适尺寸的数据包中。 (2)数据报套接字 数据报套接字支持双向的数据流,但并不保证数据传输的可靠性、有序性和无重复性。也就是说,一个从数据报套接字接收信息的进程有可能发现信息重复,或者和发出时的顺序不同的情况。此外,数据报套接字的一个重要特点是它保留了记录边界。,5.2.2 Winsock控件的属性、方法和事件,1. Winsock控件的属性,表5-13 State属性值,2. Winsock的方法,(1)Accept方法 仅适用于TCP服务器应用程序。在处理ConnectionRequest事件时用这个方法接受新连接,使用语法如下: Winsock1.Accept requestID (2)Bind方法 指定用于TCP连接的LocalPort和LocalIP。使用的语法如下: Winsock1.Bind LocalHost , LocalIP (3)Close方法 对客户机和服务器应用程序TCP连接或侦听套接字。使用语法如下: Winsock1.Close,2. Winsock的方法,(4)GetData方法 获取当前的数据块并将其存储在变体类型的变量中。使用语法如下: Winsock1.GetData data , type , maxLen (5)Listen方法 创建套接字并将其设置为侦听模式。该方法仅适用于TCP连接。使用语法如下: Winsock1.Listen (6)PeekData方法 PeekData方法不从输入队列删除数据,除了这一点之外,方法与GetData相似。该方法仅适用于TCP连接。 (7)SendData方法 将数据发送给远程计算机使用语法如下: Winsock1.SendData data,3. Winsock的事件,4. Winsock控件的使用方法,(1) 选择通讯协议的标准 在使用 WinSock 控件时,首先需要考虑使用什么协议。可以使用的协议包括 TCP 和 UDP。两种协议之间的重要区别在于它们的连接状态 . (2)协议的设置 sckTCPProtocol 或者 sckUDPProtocol。也可以使用程序代码来设置 Protocol 属性,如下所示: Winsock1.Protocol = sckTCPProtocol (3)确定计算机的名称,4. Winsock控件的使用方法,(1) 选择通讯协议的标准 在使用 WinSock 控件时,首先需要考虑使用什么协议。可以使用的协议包括 TCP 和 UDP。两种协议之间的重要区别在于它们的连接状态 . (2)协议的设置 sckTCPProtocol 或者 sckUDPProtocol。也可以使用程序代码来设置 Protocol 属性,如下所示: Winsock1.Protocol = sckTCPProtocol,5.2.3 Winsock控件TCP协议的使用,1. 服务器端界面,2. 服务器端程序设计,(1)定义程序中的全局变量 Option Explicit Dim RecevieData As String 接收数据 Dim IntMax As Integer 使用WinSock控件的最大值 (2)在form_load中,进行变量初始化。 Private Sub Form_Load() On Error Resume Next 出错处理 lbListen.LocalPort = 1011 初始化本地主机端口 lbListen.Listen开始监听 Label4.Caption = lbListen.LocalIP显示本地的IP地址 End Sub,2. 服务器端程序设计,(3)当客户端有连接请求时,在服务器端触发ConnectionRequest事件,其事件处理程序代码如下: Private Sub lbListen_ConnectionRequest(ByVal requestID As Long) If Index 15 Then IntMax = IntMax + 1 Load Winsock1(IntMax) Winsock1(IntMax).LocalPort = 0 Winsock1(IntMax).Accept requested Label5.Caption = lbListen(IntMax).RemoteHostIP End Sub,2. 服务器端程序设计,(4)在DataArrival事件被触发后程序把接受到的数据放在了Vbstring中,并将它显示在文本框中。 (5)现在,在服务器端既能监听又能接收数据,而且还能把接收的数据显示出来,关闭事件处理程序如下: Private Sub lbListen_Close() If sock(sockIndex).State sockClosed Then sock(sockIndex).Close End If End Sub (6)单击“退出”按钮Click事件。 Private Sub Command1_Click() Unload Me End Sub,3. 客户端程序设计,(1)定义变量 Dim remoteHost As String Dim remoteport As Long,3. 客户端程序设计,(2)当用户单击“发送”按钮之后,所触发的事件处理程序如下: Private Sub Command1_Click() remoteHost = Text2.Text Text2文本框中所输入的IP地址 If Winsock1.State sckConnected Then If Winsock1.State sckClosed Then Winsock1.Close Winsock控件关闭连接 End If Winsock1.Connect remoteHost, remoteport 根据所设定的远程主机和远程端口进行连接 Else Label1.Caption = “已连接“ Winsock1.SendData Text1.Text 发送数据 End If End Sub,3. 客户端程序设计,(3)其它事件程序 Private Sub Form_Load() remoteport = 1011 remoteHost = Text2.Text Label1.Caption = “可以开始了“ End Sub Private Sub Text2_Change() remoteHost = Text2.Text End Sub,Private Sub Winsock1_Close() If Winsock1.State Closed Then Winsock1.Close Command1.Enabled = False Label1.Caption = “连接关闭“ End If End Sub,5.2.5 Winsock控件UDP协议的使用,1. Winsock控件UDP协议的使用说明,(1)将 RemoteHost 属性设置为另一台计算机的名称或者IP地址。 (2)将 RemotePort 属性设置为另一台计算机Winsock控件所绑定的 LocalPort 属性。 (3)调用 Bind 方法,指定使用的LocalPort。,2. UDP聊天程序的一端,(1)创建一个新的Standard EXE 工程。 (2)将缺省的窗体的名称修改为PeerA。 (3)将窗体的标题修改为“服务器端”。 (4)在窗体中放入一个 Winsock 控件,并将其命名为 udpPeerA。 (5)在Winsock 控件的“属性”页上,单击“Protocol”属性,并将该属性值修改为 UDPProtocol。 (6)在窗体中添加两个TextBox控件。将第一个命名为 txtSend,第二个命名为 txtOutput。,(7)为窗体增加如下的代码。 Private Sub Form_Load() With udpPeerA .RemoteHost= “LBLiubing“ .RemotePort = 1001 .Bind 1002 End With End Sub,Private Sub txtSend_Change() udpPeerA.SendData txtSend.Text End Sub Private Sub udpPeerA_DataArrival (ByVal bytesTotal As Long) Dim strData As String udpPeerA.GetData strData txtOutput.Text = strData End Sub,3. UDP的聊天程序的另一端,(1) 在工程中添加一个标准窗体。 (2) 将窗体的名字修改为 frmPeerB。 (3) 将窗体的标题修改为“Peer B”。 (4) 在窗体中放入一个 Winsock 控件,并将其命名为 udpPeerB。 (5) 在“属性”页上,单击“协议”并将协议修改为“UDPProtocol”。 (6) 在窗体上添加两个 TextBox 控件。将第一个命名为 txtSend,第二个命名为 txtOutput。,(7)在窗体中添加如下的代码。 Private Sub Form_Load() With udpPeerB .RemoteHost=“jljiangli“ .RemotePort = 1002 .Bind 1001 End With End Sub,Private Sub txtSend_Change() udpPeerB.SendData txtSend.Text End Sub Private Sub udpPeerB_DataArrival (ByVal bytesTotal As Long) Dim strData As String udpPeerB.GetData strData txtOutput.Text = strData End Sub,5.3.1 网络监听的原理,1. 以太网的工作原理 把网卡设置为“混杂模式”,这样不管网络中的数据包是否是传送给本地主机,这种模式的网卡都接收。 在正常的情况下,一个网络接口应该只响应这样的两种数据帧: (1)与自己硬件地址相匹配的数据帧。 (2)发向所有机器的广播数据帧。,2. 网卡的工作原理,对于网卡一般有四种接收模式: (1)广播方式:该模式下的网卡能够接收网络中的广播信息。 (2)组播方式:设置在该模式下的网卡能够接收组播数据。 (3)直接方式:在这种模式下,只有目的网卡才能接收该数据。 (4)混杂模式:在这种模式下的网卡能够接收一切通过它的数据,而不管该数据是否是传给它的。,3. 网络监听的工作原理,(1)在以太网中是基于广播方式传送数据的,也就是说,所有的物理信号都要经过同一网段的所有网络设备。 (2)网卡可以置于一种模式叫混杂模式(promiscuous mode),在这种模式下工作的网卡能够接收到一切通过它的数据,而不管实际上数据的目的地址是不是它。这就是以下将要介绍的网络监听工作的基本原理:让网卡接收一切它所能接收的数据。,4. 网络监听软件的设计实现,(1)把网卡设置为混杂模式 (2)捕获数据包 (3)分析数据包,5. 分析数据包,5.3.2 数据包捕获工具,1. 数据包捕获工具 注册方法如下: (1)首先要对Winpacp组件进行注册,即双击该组件图标。(Winpacp组件和packet.dll文件可在水电出版社网站下载) (2)在包括packet.dll文件的文件夹下,用“开始程序附件记事本”软件建立一个批处理文件,文件的名字后缀一定要是“.bat”,如“regpacketvb.bat”。文件中的内容如下: regsvr32 packetvb.dll (3)执行新建立的批处理文件。,2. vbpcap的引用方式,定义用于采集数据包的变量,方法如下: Public WithEvents vpacket As vbPacket Set vpacket = New vbPacket,(1)获取网卡名字的方法 GetAdapterNames (AdapterNamesStr as String) as Long 该方法中的参数AdapterNamesStr的尺寸必须通过显式定义,例如: Dim AdapterNames As String * 1000,3. Packetvb的的方法,Private Sub Form_Load() Dim adapterNames As String * 1000 Set vpacket = New vbPacket CurrentSelectedAdapter = “ numAdapters = vpacket.GetAdapterNames(adapterNames) AdapterNamesList = Split(adapterNames, vbNullChar) For i = 0 To numAdapters List1.AddItem (AdapterNamesList(i) Next i End Sub,3. Packetvb的的方法,(3)获取网卡信息 GetNetInfo方法可获取指定网卡的IP地址和子网掩码。其使用语法如下: GetNetInfo(AdapterName as string,netIP as long,netMask as long),3. Packetvb的的方法,Private Sub Command1_Click() Dim netIP As Long Dim netMask As Long CurrentSelectedAdapter = List1.List(List1.ListIndex) If CurrentSelectedAdapter “ Then vpacket.GetNetInfo CurrentSelectedAdapter, netIP, netMask Label3.Caption = GetIpFromLong(netIP) Label5.Caption = GetIpFromLong(netMask) Else MsgBox “请先选择一个网卡后,才能显示该网卡的IP和子网掩码!“ End If End Sub,Public CurrentSelectedAdapter As String Public Declare Sub memcpy Lib “kernel32“ Alias _ “RtlMoveMemory“ (ByRef Destination As Any, _ ByRef Source As Any, ByVal Length As Long) Public Function GetIpFromLong(lngIPAddress As Long) As String Dim arrIpParts(3) As Byte memcpy arrIpParts(0), lngIPAddress, 4 GetIpFromLong = CStr(arrIpParts(3) & “.“ & _ CStr(arrIpParts(2) & “.“ & _ CStr(arrIpParts(1) & “.“ & _ CStr(arrIpParts(0) End Function,4. Packetvb的属性,5. 事件,Packetvb仅有一个事件,即PacketReceived事件,其语法如下: PacketReceived(numerofbytes As Long),5.3.3 数据包的捕获,For i = 0 To numAdapters vpacket.GetNetInfo AdapterNamesList(i), netip, netmask If netip 0 Then CurrentSelectedAdapter = ToolBar1.Buttons(5).ButtonMenus(i + 1).Text txtAdapter.Text = ToolBar1.Buttons(5).ButtonMenus(i + 1).Text txtIP.Text = GetIpFromLong(netip) txtMask.Text = GetIpFromLong(netmask) ToolBar1.Buttons.Item(2).Enabled = True Exit For End If Next i,5.3.3 数据包的捕获,If CurrentSelectedAdapter = “ Then MsgBox “You must select an adapter first“, vbOKOnly, “Adapter?“ Exit Sub End If 清除lsvPackets控件中的内容 lsvPackets.ListItems.Clear 清除trvProtocols控件中的内容 trvProtocols.Nodes.Clear 捕获包的数量变量清零 PacketCount = 0,5.3.3 数据包的捕获,ToolBar1.Buttons.Item(2).Enabled = False 关闭开始按钮 ToolBar1.Buttons.Item(3).Enabled = True 打开停止铵钮 ToolBar1.Buttons.Item(5).Enabled = False 关闭网卡选择按钮 打开目前所选择的网卡 vpacket.OpenAdapter (CurrentSelectedAdapter) 设置网卡的模式为混杂模式 vpacket.HWFilter = PACKET_TYPE_PROMISCUOUS 设置超时时间为1000 vpacket.ReadTimeOut = 1000 定为第一个数据包 vpacket.AllocatePacket 然后初始化缓冲区的尺寸 vpacket.InitPacket (UBound(ByteArray) 设置缓冲区尺寸 vpacket.Bu
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:大学计算机网络实验教程-刘兵-课件PPT
链接地址:https://www.renrendoc.com/p-21836122.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!