因为工作需要写了一个文件传输的东东 使用了System.Runtime.Remoting 客户端接口类: Namespace Nail.Net.Remoting.Trans Public Interface iTransFile Function SendFile(ByVal FileName As String, ByVal bytes() As Byte, ByVal ClientCrc As Integer) As Integer Function CompareFile(ByVal FileName As String, ByVal ClientCrc As Integer) As Boolean Function GetFileDet(ByVal FileName As String) As Integer Function GetFileInfo(ByVal FileName As String) As Byte() Function GetFileInfo(ByVal FileName As String, ByVal Length As Integer) As Byte() Function GetFileInfo(ByVal FileName As String, ByVal Point As Integer, ByVal Length As Integer) As Byte() Property ServerTransSaveFilePath() As String Property ServerTempFilePath() As String End Interface End Namespace 客户端类:(文件传输的实现在此)(包含1个窗体 后面窗体代码我会贴出来)(请添加引用System.Runtime.Remoting .net默认是不引用的 服务器端类同样) Imports System.Runtime Imports System.Runtime.Remoting Imports System.Runtime.Remoting.Channels Imports System.Runtime.Remoting.Channels.Tcp Imports System.IO Imports System.Threading Namespace Nail.Net.Remoting.Client Public Class FileTransClient Private TransTempSize As Integer Private TransType As TrType Private TransPort As Integer Private TransServerClassName As String Private TransServerIpAdr As String Private TransCRC32 As Integer Private Tsc As Nail.Net.Remoting.Trans.iTransFile Private Senconds As Integer = 10 Private WithEvents Timer1 As New System.Windows.Forms.Timer Private NewTransForm As FrmTransfersUI Private TransFileName As String '文件全路径 Public Property FullFileName() As String Get Return TransFileName End Get Set(ByVal Value As String) TransFileName = Value End Set End Property '缓存属性 Public Property TempSize() As Integer Get Return TempSize End Get Set(ByVal Value As Integer) Me.TransTempSize = Value End Set End Property '端口属性 Public Property Port() As Integer Get Return Port End Get Set(ByVal Value As Integer) Me.TransPort = Value End Set End Property '服务器端服务名属性 Public Property ServerClassName() As String Get Return ServerClassName End Get Set(ByVal Value As String) Me.TransServerClassName = Value End Set End Property '服务器端IP地址属性 Public Property ServerIpAdr() As String Get Return ServerIpAdr() End Get Set(ByVal Value As String) Me.TransServerIpAdr = Value End Set End Property
'枚举传输类型 Enum TrType TCP = 1 HTTP = 2 End Enum '传输类别属性 Public Property Type() As TrType Get Return TransType End Get Set(ByVal Value As TrType) Me.TransType = Value End Set End Property '连接服务器 Public Sub ConnetServer() Try Select Case TransType Case TrType.TCP Tsc = Activator.GetObject(GetType(Nail.Net.Remoting.Trans.iTransFile), "tcp://" & TransServerIpAdr & ":" & TransPort & "/" & TransServerClassName) Case TrType.HTTP Tsc = Activator.GetObject(GetType(Nail.Net.Remoting.Trans.iTransFile), "http://" & TransServerIpAdr & ":" & TransPort & "/" & TransServerClassName) End Select Catch ex As Exception MsgBox(ex.ToString) End Try End Sub Public Function CheckFileInfo(ByVal FileName As String) As Integer Dim crc As New Nail.FileTools.clsCrc32 Return crc.CalcuateFile(FileName) End Function Public Sub SendFile() ShowUI() Timer1.Interval = 10 Timer1.Start() Dim SendThead As New Thread(AddressOf SendFileToServer) SendThead.Start() End Sub '发送文件方法 Private Sub SendFileToServer() Dim Crc As Integer = CheckFileInfo(TransFileName) Dim Fif As New FileInfo(TransFileName) Dim FileSm As New FileStream(TransFileName, FileMode.Open, FileAccess.Read, FileShare.Read) If FileSm.Length = 0 Then MsgBox("这是个空文件 请选择一个有效文件!") Exit Sub End If Dim bty(TransTempSize - 1) As Byte Dim Star As Integer = 0 Dim i As Long NewTransForm.MaxOfProgress = FileSm.Length '进度条总量 NewTransForm.FileSize = Fif.Length / 1000 & "Kbyte" '文件大小 NewTransForm.TransfersFileName = Fif.Name '文件名 Try If (Fif.Length / TransTempSize).ToString.IndexOf(".") > 0 Then If (Fif.Length / TransTempSize).ToString.Substring(0, 1) = "0" Then ReDim bty(Fif.Length - 1) FileSm.Read(bty, 0, bty.Length) Tsc.SendFile(Fif.Name, bty, Crc) With NewTransForm .RateOfProgress = bty.Length '进度条当前值 .PercentOfProgress = "100%" '已完成的百分比 .LeaveTime = "完成" '剩余时间 .Transed = bty.Length & "byte" '已传输文件量 .RateOfTransfers = Math.Floor(bty.Length / Senconds) & "Kbyte/秒" '传输速度 End With Else For i = Math.Floor(Fif.Length / TransTempSize) To 1 Step -1 FileSm.Read(bty, 0, bty.Length) Tsc.SendFile(Fif.Name, bty, Crc) With NewTransForm .RateOfProgress = Star .PercentOfProgress = Math.Floor(NewTransForm.pgbTransfers.Value / NewTransForm.pgbTransfers.Maximum * 100) & "%" If Star > 0 Then .LeaveTime = TimeSpan.FromSeconds(Math.Floor((Fif.Length - Star) / 1000 / Math.Floor(Star / Senconds))).ToString End If .Transed = Star / 1000 & "Kbyte" .RateOfTransfers = Math.Floor(Star / Senconds) & "Kbyte/秒" End With Star += TransTempSize FileSm.Seek(Star, SeekOrigin.Begin) Next ReDim bty((Fif.Length - (Math.Floor(Fif.Length / TransTempSize)) * TransTempSize) - 1) FileSm.Read(bty, 0, bty.Length) Tsc.SendFile(Fif.Name, bty, Crc) With NewTransForm .RateOfProgress = .pgbTransfers.Maximum '进度条当前值 .PercentOfProgress = "100%" .LeaveTime = "完成" .Transed = FileSm.Length / 1000 & "Kbyte" .RateOfTransfers = Math.Floor(Star / Senconds) & "Kbyte/秒" '传输速度 End With End If Else For i = Math.Floor(Fif.Length / TransTempSize) To 1 Step -1 FileSm.Read(bty, 0, bty.Length) Tsc.SendFile(Fif.Name, bty, Crc) With NewTransForm .RateOfProgress = Star .PercentOfProgress = Math.Floor(NewTransForm.pgbTransfers.Value / NewTransForm.pgbTransfers.Maximum * 100) & "%" .Transed = Star / 1000 & "Kbyte" If Star > 0 Then .LeaveTime = TimeSpan.FromSeconds(Math.Floor((Fif.Length - Star) / 1000 / Math.Floor(Star / Senconds))).ToString End If .RateOfTransfers = Math.Floor(Star / Senconds) & "Kbyte/秒" '传输速度 End With Star += TransTempSize FileSm.Seek(Star, SeekOrigin.Begin) Next NewTransForm.LeaveTime = "完成" End If NewTransForm.btnCancle.Text = "确 定" Me.Timer1.Stop() Senconds = 10 'NewTransForm.Close() 'MsgBox("传输完成") Catch ex As Exception MsgBox(ex.ToString) End Try FileSm.Close() End Sub '接受文件方法 Public Function GetFile(ByVal _filename As String) As Integer End Function '记时 Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick Senconds += 10 End Sub Public Function ShowUI() As Integer NewTransForm = New FrmTransfersUI NewTransForm.Show() Return 0 End Function End Class End Namespace
客户端窗体(显示文件传输的进度 时间 大小 。。。。。) Public Class FrmTransfersUI Inherits System.Windows.Forms.Form #Region " Windows 窗体设计器生成的代码 " Public Sub New() MyBase.New() '该调用是 Windows 窗体设计器所必需的。 InitializeComponent() '在 InitializeComponent() 调用之后添加任何初始化 End Sub '窗体重写 dispose 以清理组件列表。 Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub 'Windows 窗体设计器所必需的 Private components As System.ComponentModel.IContainer '注意: 以下过程是 Windows 窗体设计器所必需的 '可以使用 Windows 窗体设计器修改此过程。 '不要使用代码编辑器修改它。 Friend WithEvents Button1 As System.Windows.Forms.Button Friend WithEvents pgbTransfers As System.Windows.Forms.ProgressBar Friend WithEvents Button2 As System.Windows.Forms.Button Friend WithEvents lblRateOfTransfers As System.Windows.Forms.Label Friend WithEvents lblTransfersFileName As System.Windows.Forms.Label Friend WithEvents btnCancle As System.Windows.Forms.Button Friend WithEvents lblFileSize As System.Windows.Forms.Label Friend WithEvents lblLeaveTime As System.Windows.Forms.Label Friend WithEvents lblPercentOfProgress As System.Windows.Forms.Label Friend WithEvents lblTransed As System.Windows.Forms.Label <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.Button1 = New System.Windows.Forms.Button Me.pgbTransfers = New System.Windows.Forms.ProgressBar Me.Button2 = New System.Windows.Forms.Button Me.lblRateOfTransfers = New System.Windows.Forms.Label Me.lblTransed = New System.Windows.Forms.Label Me.lblTransfersFileName = New System.Windows.Forms.Label Me.btnCancle = New System.Windows.Forms.Button Me.lblFileSize = New System.Windows.Forms.Label Me.lblLeaveTime = New System.Windows.Forms.Label Me.lblPercentOfProgress = New System.Windows.Forms.Label Me.SuspendLayout() ' 'Button1 ' Me.Button1.Dock = System.Windows.Forms.DockStyle.Fill Me.Button1.Enabled = False Me.Button1.FlatStyle = System.Windows.Forms.FlatStyle.System Me.Button1.Location = New System.Drawing.Point(0, 0) Me.Button1.Name = "Button1" Me.Button1.Size = New System.Drawing.Size(448, 136) Me.Button1.TabIndex = 0 ' 'pgbTransfers ' Me.pgbTransfers.Location = New System.Drawing.Point(10, 16) Me.pgbTransfers.Name = "pgbTransfers" Me.pgbTransfers.Size = New System.Drawing.Size(430, 12) Me.pgbTransfers.TabIndex = 1 ' 'Button2 ' Me.Button2.Enabled = False Me.Button2.FlatStyle = System.Windows.Forms.FlatStyle.System Me.Button2.Location = New System.Drawing.Point(4, 4) Me.Button2.Name = "Button2" Me.Button2.Size = New System.Drawing.Size(442, 130) Me.Button2.TabIndex = 2 ' 'lblRateOfTransfers ' Me.lblRateOfTransfers.FlatStyle = System.Windows.Forms.FlatStyle.System Me.lblRateOfTransfers.Location = New System.Drawing.Point(10, 36) Me.lblRateOfTransfers.Name = "lblRateOfTransfers" Me.lblRateOfTransfers.Size = New System.Drawing.Size(220, 14) Me.lblRateOfTransfers.TabIndex = 3 Me.lblRateOfTransfers.Text = "传输速度:" ' 'lblTransed ' Me.lblTransed.FlatStyle = System.Windows.Forms.FlatStyle.System Me.lblTransed.Location = New System.Drawing.Point(10, 58) Me.lblTransed.Name = "lblTransed" Me.lblTransed.Size = New System.Drawing.Size(220, 14) Me.lblTransed.TabIndex = 4 Me.lblTransed.Text = "已 传 送:" ' 'lblTransfersFileName ' Me.lblTransfersFileName.FlatStyle = System.Windows.Forms.FlatStyle.System Me.lblTransfersFileName.Location = New System.Drawing.Point(10, 80) Me.lblTransfersFileName.Name = "lblTransfersFileName" Me.lblTransfersFileName.Size = New System.Drawing.Size(220, 14) Me.lblTransfersFileName.TabIndex = 5 Me.lblTransfersFileName.Text = "传输文件:" ' 'btnCancle ' Me.btnCancle.FlatStyle = System.Windows.Forms.FlatStyle.System Me.btnCancle.Location = New System.Drawing.Point(192, 104) Me.btnCancle.Name = "btnCancle" Me.btnCancle.TabIndex = 6 Me.btnCancle.Text = "取 消" ' 'lblFileSize ' Me.lblFileSize.FlatStyle = System.Windows.Forms.FlatStyle.System Me.lblFileSize.Location = New System.Drawing.Point(246, 80) Me.lblFileSize.Name = "lblFileSize" Me.lblFileSize.Size = New System.Drawing.Size(192, 14) Me.lblFileSize.TabIndex = 9 Me.lblFileSize.Text = "文件大小:" ' 'lblLeaveTime ' Me.lblLeaveTime.FlatStyle = System.Windows.Forms.FlatStyle.System Me.lblLeaveTime.Location = New System.Drawing.Point(246, 58) Me.lblLeaveTime.Name = "lblLeaveTime" Me.lblLeaveTime.Size = New System.Drawing.Size(192, 14) Me.lblLeaveTime.TabIndex = 8 Me.lblLeaveTime.Text = "剩余时间:" ' 'lblPercentOfProgress ' Me.lblPercentOfProgress.FlatStyle = System.Windows.Forms.FlatStyle.System Me.lblPercentOfProgress.Location = New System.Drawing.Point(246, 36) Me.lblPercentOfProgress.Name = "lblPercentOfProgress" Me.lblPercentOfProgress.Size = New System.Drawing.Size(192, 14) Me.lblPercentOfProgress.TabIndex = 7 Me.lblPercentOfProgress.Text = "传输进度:" ' 'FrmTransfersUI ' Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14) Me.ClientSize = New System.Drawing.Size(448, 136) Me.Controls.Add(Me.lblFileSize) Me.Controls.Add(Me.lblLeaveTime) Me.Controls.Add(Me.lblPercentOfProgress) Me.Controls.Add(Me.btnCancle) Me.Controls.Add(Me.lblTransfersFileName) Me.Controls.Add(Me.lblTransed) Me.Controls.Add(Me.lblRateOfTransfers) Me.Controls.Add(Me.pgbTransfers) Me.Controls.Add(Me.Button2) Me.Controls.Add(Me.Button1) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None Me.Name = "FrmTransfersUI" Me.ShowInTaskbar = False Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen Me.Text = "FrmTransfersUI" Me.TopMost = True Me.ResumeLayout(False) End Sub #End Region Public Event UserCancle() Public WriteOnly Property MaxOfProgress() Set(ByVal Value) Me.pgbTransfers.Maximum = Value End Set End Property Public WriteOnly Property RateOfProgress() Set(ByVal Value) Me.pgbTransfers.Value = Value End Set End Property Public WriteOnly Property RateOfTransfers() As String Set(ByVal Value As String) Me.lblRateOfTransfers.Text = "传输速度:" & Value End Set End Property Public WriteOnly Property Transed() As String Set(ByVal Value As String) Me.lblTransed.Text = "已 传 送:" & Value End Set End Property Public WriteOnly Property TransfersFileName() As String Set(ByVal Value As String) Me.lblTransfersFileName.Text = "传输文件:" & Value End Set End Property Public WriteOnly Property PercentOfProgress() As String Set(ByVal Value As String) Me.lblPercentOfProgress.Text = "传输进度:" & Value End Set End Property Public WriteOnly Property LeaveTime() As String Set(ByVal Value As String) Me.lblLeaveTime.Text = "剩余时间:" & Value End Set End Property Public WriteOnly Property FileSize() As String Set(ByVal Value As String) Me.lblFileSize.Text = "文件大小:" & Value End Set End Property Private Sub btnCancle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancle.Click
If Me.btnCancle.Text = "确 定" Then Me.Close() Else RaiseEvent UserCancle() End If End Sub End Class
服务器端类 下面还有个模块 Imports System.Runtime Imports System.Runtime.Remoting Imports System.Runtime.Remoting.Channels Imports System.Runtime.Remoting.Channels.Tcp Imports System.IO Namespace Nail.Net.Remoting.Server Public Class FileTransServer Private TransServerClassName As String Private TransType As TrType Private TransPort As Integer Private TransCRC32 As Integer Enum TrType TCP = 1 HTTP = 2 End Enum Public Property Type() As TrType Get Return TransType End Get Set(ByVal Value As TrType) Me.TransType = Value End Set End Property Public Property ServerTransSaveFilePath() As String Get Return TransSaveFilePath End Get Set(ByVal Value As String) TransSaveFilePath = Value End Set End Property Public Property ServerTempFilePath() As String Get Return TempFilePath End Get Set(ByVal Value As String) TempFilePath = Value End Set End Property Public Property ServerClassName() As String Get Return ServerClassName End Get Set(ByVal Value As String) Me.TransServerClassName = Value End Set End Property Public Property Port() As Integer Get Return Port End Get Set(ByVal Value As Integer) Me.TransPort = Value End Set End Property Public Sub StarServer() Select Case TransType Case TrType.TCP Dim a As New System.Runtime.Remoting.Channels.Tcp.TcpChannel(TransPort) ChannelServices.RegisterChannel(a) Case TrType.HTTP Dim a As New System.Runtime.Remoting.Channels.Http.HttpChannel(TransPort) ChannelServices.RegisterChannel(a) End Select System.Runtime.Remoting.RemotingConfiguration.ApplicationName = TransServerClassName RemotingConfiguration.RegisterWellKnownServiceType(GetType(TransFile), TransServerClassName, WellKnownObjectMode.SingleCall) End Sub End Class Public Class TransFile Inherits MarshalByRefObject Implements Nail.Net.Remoting.Trans.iTransFile Public Function CompareFile(ByVal FileName As String, ByVal ClientCrc As Integer) As Boolean Implements Nail.Net.Remoting.Trans.iTransFile.CompareFile Dim crc As New Nail.FileTools.clsCrc32 If crc.CalcuateFile(FileName) = ClientCrc Then Return True Else Return False End If End Function Public Function GetFileDet(ByVal FileName As String) As Integer Implements Nail.Net.Remoting.Trans.iTransFile.GetFileDet Dim c As New FileInfo(FileName) Return c.Length End Function Public Function GetFileInfo(ByVal FileName As String) As Byte() Implements Nail.Net.Remoting.Trans.iTransFile.GetFileInfo Dim FullName As String = FileName Dim c As New FileInfo(FullName) Return GetFileInfo(FileName, 0, c.Length) End Function Public Function GetFileInfo(ByVal FileName As String, ByVal Length As Integer) As Byte() Implements Nail.Net.Remoting.Trans.iTransFile.GetFileInfo Return GetFileInfo(FileName, 0, Length) End Function Public Function GetFileInfo(ByVal FileName As String, ByVal Point As Integer, ByVal Length As Integer) As Byte() Implements Nail.Net.Remoting.Trans.iTransFile.GetFileInfo Dim FullName As String = FileName Dim c As New FileInfo(FullName) Dim x As New FileStream(FullName, FileMode.Open, FileAccess.Read, FileShare.Read) Dim bty(Length - 1) As Byte x.Seek(Point, SeekOrigin.Begin) x.Read(bty, 0, Length) Return bty End Function Public Function SendFile(ByVal FileName As String, ByVal bytes() As Byte, ByVal ClientCrc As Integer) As Integer Implements Nail.Net.Remoting.Trans.iTransFile.SendFile Try Dim a As New FileStream(TempFilePath & FileName, FileMode.OpenOrCreate) a.Seek(a.Length, SeekOrigin.Begin) a.Write(bytes, 0, bytes.Length) a.Close() Return 0 Catch ex As Exception MsgBox(ex.ToString) Return 1 Finally 'Dim Finf As New FileInfo(TempFilePath & FileName) 'If CompareFile(TempFilePath & FileName, ClientCrc) = True Then ' '拷贝临时文件() ' File.Copy(TempFilePath & FileName, TransSaveFilePath & FileName, True) 'Else ' '删除临时文件() ' Finf.Delete() 'End If End Try End Function Public Property ServerTempFilePath() As String Implements Nail.Net.Remoting.Trans.iTransFile.ServerTempFilePath Get Return TempFilePath End Get Set(ByVal Value As String) TempFilePath = Value End Set End Property Public Property ServerTransSaveFilePath() As String Implements Nail.Net.Remoting.Trans.iTransFile.ServerTransSaveFilePath Get Return TransSaveFilePath End Get Set(ByVal Value As String) TransSaveFilePath = Value End Set End Property End Class End Namespace 模块: Module Server Public TransSaveFilePath As String Public TempFilePath As String End Module 使用方法: 服务器端 示例: Dim Server As New Nail.Net.Remoting.Server.FileTransServer Server.ServerClassName = "aaa" Server.Port = 10001 Server.Type = Nail.Net.Remoting.Server.FileTransServer.TrType.HTTP Server.ServerTempFilePath = "f:\" Server.ServerTransSaveFilePath = "e:\" Server.StarServer() 客户端 cl.Port = 10001 cl.ServerClassName = "aaa" cl.TempSize = 102400 cl.ServerIpAdr = "localhost" cl.FullFileName = "c:\111.rar" cl.Type = Nail.Net.Remoting.Client.FileTransClient.TrType.HTTP cl.ConnetServer() 发送文件: cl.SendFile() 最后忘记贴文件校对了 照书上搞的CRC32 Imports System.IO Namespace Nail.FileTools Public Class clsCrc32 Private Const TABLESIZE As Integer = 256 Private Const DEFAULTPOLYNOMIAL As Integer = &HEDB88320 Private Const DEFAULTIALVALUE As Integer = &HFFFFFFFF Private lookup(TABLESIZE - 1) As Integer Private crcPolynomial As Integer = 0 Public Sub New() Me.New(DEFAULTPOLYNOMIAL) End Sub Public Sub New(ByVal crcPolynomial As Integer) Me.crcPolynomial = crcPolynomial InitLookupTable() End Sub Public Property Polynomial() As Integer Get Return crcPolynomial End Get Set(ByVal Value As Integer) Me.crcPolynomial = Value InitLookupTable() End Set End Property Public Overloads Function CalculateBlock(ByVal bytes() As Byte) As Integer Return CalculateBlock(bytes, 0, bytes.Length) End Function Public Overloads Function CalculateBlock(ByVal bytes() As Byte, ByVal index As Integer, ByVal length As Integer) As Integer Return CalculateBlock(bytes, index, length, DEFAULTIALVALUE) End Function Public Overloads Function CalculateBlock(ByVal bytes() As Byte, ByVal index As Integer, ByVal length As Integer, ByVal initialValue As Integer) As Integer If bytes Is Nothing Then ElseIf index < 0 Or length <= 0 Or index + length > bytes.Length Then End If Return Not internalcalculateBlock(bytes, index, length, initialValue) End Function Private Function internalcalculateBlock(ByVal bytes() As Byte, ByVal index As Integer, ByVal length As Integer, ByVal initialValue As Integer) As Integer Dim crc As Integer = initialValue Dim shiftCrc As Integer Dim position As Integer For position = index To length - 1 shiftCrc = crc And &HFFFFFF00 shiftCrc = shiftCrc / &H100 shiftCrc = shiftCrc And &HFFFFFF crc = shiftCrc Xor lookup(bytes(position)) Xor (crc And &HFF) Next Return crc End Function Public Overloads Function CalcuateFile(ByVal path As String) As Integer Return CalcuateFile(path, DEFAULTIALVALUE) End Function Public Overloads Function CalcuateFile(ByVal path As String, ByVal initialValue As Integer) As Integer If path Is Nothing Then ElseIf path.Length = 0 Then End If Return Not InternalCalculateFile(path, initialValue) End Function Private Function InternalCalculateFile(ByVal path As String, ByVal initialValue As Integer) As Integer Const blockSize As Integer = 4096 Dim count As Integer Dim inStream As System.IO.FileStream Dim bytes(blockSize - 1) As Byte Dim crc As Integer = initialValue Try inStream = System.IO.File.Open(path, FileMode.Open, FileAccess.Read) While inStream.Position < inStream.Length count = inStream.Read(bytes, 0, blockSize) crc = internalcalculateBlock(bytes, 0, count, crc) End While Finally If Not inStream Is Nothing Then inStream.Close() End If End Try Return crc End Function Private Sub InitLookupTable() Dim bytecount, bitcount As Integer Dim crc, shiftCrc As Integer For bytecount = 0 To TABLESIZE - 1 crc = bytecount For bitcount = 0 To 7 shiftCrc = crc And &HFFFFFFFE shiftCrc = shiftCrc \ &H2 shiftCrc = shiftCrc And &H7FFFFFFF If (crc And &H1) Then crc = shiftCrc Xor crcPolynomial Else crc = shiftCrc End If Next lookup(bytecount) = crc Next End Sub End Class End Namespace 
|