webclient via tcpclient braucht lange

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Agita.

    webclient via tcpclient braucht lange

    bastel grad eine eigene webclass.
    nur eine frage auf die ich bisher keine antwort gefunden habe:
    so wie jetzt läuft alles bestens, wenn ich aber das komentierte anstelle von den 3 zeilen da drüber benutze, dann braucht die funktion an der gekennzeichneten stelle seeeehr lange (~10 sekunden).
    wieso?

    Quellcode

    1. Public Function SendGet(ByVal Path As String, Optional ByVal Port As Integer = 80) As String()
    2. SendGet = New String() {}
    3. Try
    4. Dim Host As String = New Uri(Path).Host
    5. Dim MyTcp = New TcpClient(Host, Port)
    6. If MyTcp.Connected Then
    7. Dim nStream As NetworkStream = MyTcp.GetStream()
    8. Dim sWriter As New StreamWriter(nStream)
    9. Dim sReader As New StreamReader(nStream)
    10. Dim regexLength As String = "Content-Length: (\d+)"
    11. Dim ReadContent As Boolean = False
    12. Dim ContentLength As Integer = 0
    13. sWriter.WriteLine("GET " & Path & " HTTP/1.1")
    14. sWriter.WriteLine("Host: " & Host)
    15. sWriter.WriteLine("")
    16. sWriter.Flush()
    17. Dim Response As String = ""
    18. Do
    19. Response = sReader.ReadLine()
    20. If (Regex.IsMatch(Response, regexLength)) Then
    21. Dim RegexMatch As Match = Regex.Match(Response, regexLength)
    22. ContentLength = CInt(RegexMatch.Groups(1).ToString)
    23. End If
    24. If Response = "" Then
    25. Exit Do
    26. End If
    27. Application.DoEvents()
    28. Loop Until Response Is Nothing
    29. Dim bytes(ContentLength) As Char
    30. sReader.Read(bytes, 0, ContentLength)
    31. SendGet = CStr(bytes).Split(CChar(vbCrLf))
    32. 'Dim ReturnStrings As new List(Of String)
    33. 'Do
    34. ' 'HIER STOCKT DAS PROGRAMM
    35. ' Response = sReader.ReadLine()
    36. ' ReturnStrings.Add(Response)
    37. 'Loop Until Response Is Nothing
    38. 'SendGet = ReturnStrings.ToArray()
    39. nStream.Close()
    40. sWriter.Close()
    41. sReader.Close()
    42. MyTcp.Close()
    43. End If
    44. Catch ex As Exception
    45. End Try
    46. End Function
    hab den fehler selbst gefunden.

    folgendes ist keine gute lösung, da der server den response auch ja auch in segmenten (keine ahnung wie man das genau nennt) senden kann:

    Quellcode

    1. sReader.Read(bytes, 0, ContentLength)


    felgendes funktioniert nun einwandfrei:

    Quellcode

    1. Do
    2. Response = sReader.ReadLine()
    3. Send &= Response & vbCrLf
    4. If (Send.Length >= ContentLength) Then Exit Do
    5. Loop Until Response Is Nothing


    Thema erledigt :)