套接字打开后开始请求数据,发送数据未见错误,但是接收时,老是出现tcpAsyCl.Connected=false,程序老是调到Else后面,打上断点后发现tcpAsyCl.Connected=false,为什么接收数据时套接字会断开??
 If (tcpAsyCl IsNot Nothing) And (tcpAsyCl.Connected) Then            Try
                ReDim tcpSyncClBuffer(ReadByteLen - 1)
                tcpAsyCl.Receive(tcpSyncClBuffer, tcpSyncClBuffer.Length, SocketFlags.None)
                ReDim inData(DataByteLen - 1)
                Array.Copy(tcpSyncClBuffer, StartByte, inData, 0, inData.Length)
                Return True
            Catch ex As Exception
                ReadSyncData = False
                CallException(write_data(7), write_data(7), ErrorNum.excReadFail)
            End Try
Else
            ReadSyncData = False  ‘’程序老是跳到这里来
            CallException(write_data(7), write_data(7), ErrorNum.excConErr)
End If

解决方案 »

  1.   

        你好,我这是C/s结构的Modbus TCP/IP 通讯,因为以前没接触过TCP网络通讯这块,所以代码是通过msdn和网上搜索凑起来的,现在和下位机已经通讯上了,就是一问一答的方式,我发一个请求,然后下位机给我个回复,我看好多程序读取下位机数据时,不计算下位机发送的字节数,直接收取256个字节(自己定义一个定长的数组),我是计算出下位机发送过来的字节数,然后读取相应的字节到等长的数组里。
         另外这是vb.net的代码,因为关于vb.net的modbus tcp/ip的资料比较少,是从C#代码上改过来的,其实我要的功能很简单,我给下位机发送个请求,下位机给我返回相应的数据。
         我看你回答过很多socket网络编程的帖子,能不能简单给介绍下,或给点相关资料,现在的代码虽然能实现功能,但总感觉不专业,不是那回事