Foxtable(狐表)用户栏目专家坐堂 → [求助]socket代码无规律出现索引超出范围的错误。是哪里有问题了


  共有2198人关注过本帖树形打印复制链接

主题:[求助]socket代码无规律出现索引超出范围的错误。是哪里有问题了

帅哥哟,离线,有人找我吗?
54292550
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:283 积分:4129 威望:0 精华:0 注册:2011/8/19 10:07:00
[求助]socket代码无规律出现索引超出范围的错误。是哪里有问题了  发帖心情 Post By:2020/6/28 14:10:00 [显示全部帖子]

全局代码:
Public socket As MyClient
Public Class MyClient
Public receiveThread As System.Threading.Thread
Public nStream As System.Net.Sockets.NetworkStream
Public tcp As  System.Net.Sockets.TcpClient
Public Sub New(ByVal ip As String, ByVal port As Integer)
Dim server As System.Net.IPAddress = System.Net.IPAddress.Parse(ip)
tcp = New System.Net.Sockets.TcpClient()
Try
    tcp.Connect(ip, port)
Catch generatedExceptionName As Exception
    tcp = Nothing
End Try
If tcp Is Nothing Then
    MsgBox("无法连接服务器,请重试")
Else
    Dim netStream As System.Net.Sockets.NetworkStream = tcp.GetStream()
    nStream = netStream
    receiveThread = New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf ReceiveMsg))
    receiveThread.IsBackground=True
    receiveThread.Start()
End If
End Sub
Private Sub ReceiveMsg()
While True
    Dim packet As Byte() = New Byte(1024) {}
    nStream.Read(packet, 0, packet.Length)
    If HEX(packet(7)) = "3" Then
        Vars("D128") = packet(10)
        Vars("D129") = packet(12)
        Vars("D130") = packet(14)
        Vars("D131") = packet(16)
        Vars("D132") = packet(18)
        Vars("D133") = packet(20)
        Vars("D134") = packet(22)
        Vars("D135") = packet(24)
    Else
       
    End If
End While
End Sub
End Class



为什么偶尔会出现

“索引超出范围.必须为非负值并小于集合大小。参数名:index

这样的错误?有时候好长时间不出现,有时候偶尔就出现几次这样的报错。



[此贴子已经被作者于2020/6/28 14:10:10编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
54292550
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:283 积分:4129 威望:0 精华:0 注册:2011/8/19 10:07:00
  发帖心情 Post By:2020/6/28 15:59:00 [显示全部帖子]

蓝老师,可能是因为网络数据包不稳定吧,这个怎么避免接收到的数据不够那么多个字符呢?如何判断一下然后我再赋值呢?

 回到顶部
帅哥哟,离线,有人找我吗?
54292550
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:283 积分:4129 威望:0 精华:0 注册:2011/8/19 10:07:00
  发帖心情 Post By:2020/6/28 18:24:00 [显示全部帖子]

Dim packet As Byte() = New Byte(1024) {}
nStream.Read(packet, 0, packet.Length)
IF packet.length > 40 then
    If HEX(packet(7)) = "3"  Then
        Vars("D128") = packet(10)
        Vars("D129") = packet(12)
        Vars("D130") = packet(14)
        Vars("D131") = packet(16)
        Vars("D132") = packet(18)
        Vars("D133") = packet(20)
        Vars("D134") = packet(22)
        Vars("D135") = packet(24)
       Else
       
    End If
End



Dim packet As Byte() = New Byte(1024) {}
这个已经声明了一个固定长度的数组了,这个packet.length始终是1025啊。

 回到顶部
帅哥哟,离线,有人找我吗?
54292550
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:283 积分:4129 威望:0 精华:0 注册:2011/8/19 10:07:00
  发帖心情 Post By:2020/6/29 12:25:00 [显示全部帖子]

蓝老师,Var全局变量,我用了好几个计划在里面赋值操作,会不会是赋值产生冲突造成那个超出数组界限得报错?因为有时候还不是那个socket代码里面报得。我感觉好像是给赋值全局变量得时候报得。

 回到顶部