用过vb6的winsock控件(MSWINSCK.OCX)的都知道,只要一句Winsock1.Connect RemoteIP,RemotePort即可进行连接,使用Winsock1.Send Data即可发送数据,这个Data大部分都是以String发送的,编码为vb默认的unicode。但是在做一个通信项目时,采用前两个字节用来判断需要接收多少的字节,以防止数据粘合和分段发送。
这边使用的是VB6,服务端使用Java和C#还有辅助工具Sockit进行测试。
字节 Byte 的数据类型范围是从0~255之间 也就是2^8-1,通过发送字节数组进行传输。
vb默认的字符是unicode编码,所有unicode都是占两个长度包括英文和数字,所以用两个字节转换成一个unicode。
Option Explicit Const yh As String = "Register'JomiXedYu'textpassword" Dim getdatad As Byte Private Sub Command1_Click() Winsock1.Connect "127.0.0.1", 7700 End Sub Private Sub Command2_Click() '声明字节变量 Dim ddd As Byte '把字符串从unicode转过来,然后在用LenB求字节长度 ddd = LenB(StrConv(yh, vbFromUnicode)) '因为这个长度肯定不能长所以只用了低字节,高字节填0,最后加上字符串发送出去 Winsock1.SendData Chr(0) + Chr(ddd) + yh End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) '接收用字节数组变量 Dim dd() As Byte Dim ff As String Winsock1.GetData dd Dim intt As Integer '取本次获取数据的除了前两个字节的其他字节 intt = UBound(dd) - 2 '定义数据字节数组并赋予大小 Dim dff() As Byte ReDim dff(intt) As Byte Dim i As Integer '从接收字节数组中循环赋值给数据字节数组 For i = 0 To UBound(dd) - 2 dff(i) = dd(i + 2) Next i '将数据字节数组转换为unicode显示出来 MsgBox StrConv(dff, vbUnicode) End Sub
文章评论