none
为什么我的networkstream.read()方法只能读取到一个数据包的内容,还有2个数据包的内容读不到。 RRS feed

  • 问题

  • 我用myTcpClinet.Connect(strHostName, intPort)连接到TELNET服务器后,服务器自动返回了3个数据包,以下的代码中的myNetStream.Read(byeRead, 0, byeRead.Length)  ,byeRead()数组中只接收到一个数据包的内容,还有2个数据包的内容没有接收到。这个问题出在哪里啊。

    注:我用了网络分析软件分析后可以确定,连接到主机后,主机马上就返回了3个数据包。而我的Read方法只保存了一个数据包内容。

                myTcpClinet.Connect(strHostName, intPort)
                If myTcpClinet.Connected = True Then
                    txtMessage.Text = "主机:" + strHostName + "端口:" + intPort.ToString + "连接成功"
                Else
                   txtMessage.Text = "对不起,主机连不上"
                End If
    
                myNetStream = myTcpClinet.GetStream
                myNetStream.Read(byeRead, 0, byeRead.Length)
                analysisData(byeRead, byeTelnet, byeStr)
    
    
    2009年5月21日 14:34

答案

  • Do
                myNetStream.Read(byeRead, 0, byeRead.Length)
                analysisData(byeRead, byeTelnet, byeStr)

       Loop While myNetStream.DataAvailable

    http://feiyun0112.cnblogs.com/
    2009年5月22日 0:39
    版主
  • 你好!
         问题出在这里:
         myNetStream.Read(byeRead, 0, byeRead.Length)
         你第三个参数设置的是byeRead.Length,这个是数组的元素的数量,而Read方法中这个参数需要设置为字节数,所以你读到的数据就少了,一般这个应该用循环来读取!方法上面feiyun版主已经给出了!
         希望这个解释对你有帮助!

    周雪峰
    2009年5月22日 0:45
    版主
  • Do
            var i=    myNetStream.Read(byeRead, 0, byeRead.Length)
                analysisData(byeRead, byeTelnet, byeStr , i)

       Loop While myNetStream.DataAvailable

    i 是本次read 有效长度  不取就浪费了
    有效回复过700 撒花
    2009年5月22日 3:10

全部回复

  • Do
                myNetStream.Read(byeRead, 0, byeRead.Length)
                analysisData(byeRead, byeTelnet, byeStr)

       Loop While myNetStream.DataAvailable

    http://feiyun0112.cnblogs.com/
    2009年5月22日 0:39
    版主
  • 你好!
         问题出在这里:
         myNetStream.Read(byeRead, 0, byeRead.Length)
         你第三个参数设置的是byeRead.Length,这个是数组的元素的数量,而Read方法中这个参数需要设置为字节数,所以你读到的数据就少了,一般这个应该用循环来读取!方法上面feiyun版主已经给出了!
         希望这个解释对你有帮助!

    周雪峰
    2009年5月22日 0:45
    版主
  • Do
            var i=    myNetStream.Read(byeRead, 0, byeRead.Length)
                analysisData(byeRead, byeTelnet, byeStr , i)

       Loop While myNetStream.DataAvailable

    i 是本次read 有效长度  不取就浪费了
    有效回复过700 撒花
    2009年5月22日 3:10
  • 谢谢你,你的回答让我茅塞顿开
    2009年5月22日 9:18
  • 不必客气啊!欢迎常常来这里和大家交流啊!
    周雪峰
    2009年5月22日 10:27
    版主