这是我从VBGOOD看到的一个帖子 觉得很好  转来请大家分析一下
'*****************************************************************************************
'*功能:      计算modbus校验码,参数为byte类型的数组,此数组包括校验码。                 *
'*返回值:    返回一个long型数据,此long数据包括校验码的高位和低位                       *
'*Author:                                                                                *
'*修改日期:  2006-6-22                                                                  *
'*备注:         此函数很容易修改成为封包添加校验码,例如:                              *
'*               dim longCRC as long                                                     *
'*               longCRC = CRC16(frame())         'frame()为封包                         *
'*               frame(UBound(frame) - 1) = longCRC Mod 256                              *
'*               frame(UBound(frame)) = longCRC \ 256                                    *
'*****************************************************************************************Function CRC16(Coun() As Byte) As Long
Dim intBit, intTemp As Integer
Dim lonCRC As LonglonCRC = &HFFFF&    For intCnt = 0 To UBound(Coun) - 2
        lonCRC = lonCRC Xor Coun(intCnt)
        For intBit = 0 To 7
            intTemp = lonCRC Mod 2
            lonCRC = lonCRC \ 2
            If intTemp = 1 Then
                lonCRC = lonCRC Xor &HA001&
            End If
        Next intBit
    Next intCnt
    
    CRC16 = lonCRC
End Function
·······························································我想问的是我如果做一个两台PC机之间的通信  或者单片机同PC的通信
那这个校验信息怎么加入呢。我的程序是一个自发自收的类似聊天室的程序,集合了发送和接收:Private Sub Command1_Click()
   Winsock1.SendData txtSend.Text
End SubPrivate Sub Form_Load()
Dim my As String
Winsock1.Protocol = sckUDPProtocol '设置为UDP协义
Winsock1.LocalPort = 4001     '随便设置,不过两个要一样
Winsock1.RemotePort = 4001
my = Winsock1.LocalIP     '取得自己的IP地址,是不要的
Winsock1.RemoteHost = Text1.Text '这里通过text1填入需要通信的IP地址
End SubPrivate Sub Text1_Change()Winsock1.RemoteHost = Text1.TextEnd SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long) '取得数据时发生
  Dim Tmp As String
  Winsock1.GetData Tmp, vbString '取得数据
  Tmp = "对方位址:" + Winsock1.RemoteHostIP + "发言内容为-->" + Tmp
  txtMess.Text = Tmp + Chr$(13) + Chr$(10) + txtMess.Text
End Sub
其中的难点是怎么把CRC校验位加入所发送数据的后面,是应该打包还是怎样还是做成数组的形式? 如果是数组,那整个Text的数据怎么载入? 然后在接收端接收到数据后又怎么把数据再计算一次跟校验位比较,如果一致就说明数据未丢失,算是一种软件的加密吧。