有没有办法知道TCP有效负载何时结束?

时间:2015-03-17 15:24:13

标签: vb.net sockets tcp

我有一个通过TCP发送数据的例程,必须在同一个打开的套接字上等待响应。 要接收的数据不适合一条TCP消息,所以问题是这段代码会等到最后一个字节还是我必须在最后添加一些指示?

Private Function SendReport(ByVal Msg As String, ByVal Host As String, ByVal Port As String) As String
       Try
           Dim Tx As New TcpClient()

           Dim stream As NetworkStream = Nothing
           Dim CloseStream As Boolean = False
           Dim LingerMode As New LingerOption(True, 5)

           ' String to store the response ASCII representation.
           Dim responseData As [String] = [String].Empty

           Tx.NoDelay = True
           Tx.LingerState = LingerMode
           Tx.SendTimeout = 10000
           Tx.ReceiveTimeout = 10000
           Tx.Connect(Host, Port)

           ' Translate the passed message into ASCII and store it as a Byte array.
           Dim data As [Byte]() = System.Text.Encoding.ASCII.GetBytes(Msg)

           ' Get a client stream for reading and writing.
           '  Stream stream = client.GetStream();
           stream = Tx.GetStream()
           CloseStream = True
           'stream.WriteTimeout = 100
           ' Send the message to the connected TcpServer. 
           stream.Write(data, 0, data.Length)

           'Tx.Connected 
           ' Receive the TcpServer.response.
           ' Buffer to store the response bytes.
           data = New [Byte](256) {}


           ' Read the first batch of the TcpServer response bytes.
           Dim bytes As Int32 = stream.Read(data, 0, data.Length)
           responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes)

           If CloseStream = True Then
               stream.Close()
           End If
           Tx.Close()

           Return responseData
       Catch ex As Exception
           WriteRTBLog(ex.Message, Color.Red)
           WriteRTBLog(ex.StackTrace, Color.DarkRed)
           Return "Error"
       End Try

   End Function

我之前没有申请过接收多个TCP数据包,所以我不知道会发生什么。 我必须预期的更长的数据大约是524KB

0 个答案:

没有答案