WebServer Fehler beim Verarbeiten

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von gfcwfzkm.

    WebServer Fehler beim Verarbeiten

    Hi,
    Wenn ich etwas downloaden will, kommt in der Konsole einen Fehler und
    die Datei ist dann beschädigt, da diese 0KB gross ist.
    Hier der Stück Code, den es betrifft:

    VB.NET-Quellcode

    1. ' HTTP-Antwort senden
    2. Private Sub sendHTMLResponse(ByVal httpRequest As String)
    3. Try
    4. ' Datei(en) senden
    5. Dim streamReader As StreamReader = New StreamReader(httpRequest, Encoding.Default)
    6. Dim strBuff As String = streamReader.ReadToEnd()
    7. streamReader.Close()
    8. streamReader = Nothing
    9. ' Grösse der Datei
    10. Dim respByte() As Byte = Encoding.Default.GetBytes(strBuff)
    11. ' Header einstellen
    12. Dim htmlHeader As String = _
    13. "HTTP/1.0 200 OK" & ControlChars.CrLf & _
    14. "Server: WebServer 0.6 [beta]" & ControlChars.CrLf & _
    15. "Content-Length: " & respByte.Length & ControlChars.CrLf & _
    16. "Content-Type: " & getContentType(httpRequest) & _
    17. ControlChars.CrLf & ControlChars.CrLf
    18. ' Grösse einstellen
    19. Dim headerByte() As Byte = Encoding.ASCII.GetBytes(htmlHeader)
    20. Console.WriteLine("HTML Header: " & ControlChars.CrLf & htmlHeader)
    21. ' Zurück zum client senden (HTML)
    22. clientSocket.Send(headerByte, 0, headerByte.Length, SocketFlags.None)
    23. ' Zurück zum Client senden (anhänge, bilder...)
    24. clientSocket.Send(respByte, 0, respByte.Length, SocketFlags.None)
    25. ' Verbindung beenden
    26. clientSocket.Shutdown(SocketShutdown.Both)
    27. clientSocket.Close()
    28. Catch ex As Exception
    29. Console.WriteLine(ex.StackTrace.ToString())
    30. If clientSocket.Connected Then
    31. clientSocket.Close()
    32. End If
    33. End Try
    34. End Sub
    35. ' Datei-Typen
    36. Private Function getContentType(ByVal httpRequest As String) As String
    37. If (httpRequest.EndsWith("html")) Then
    38. Return "text/html"
    39. ElseIf (httpRequest.EndsWith("htm")) Then
    40. Return "text/html"
    41. ElseIf (httpRequest.EndsWith("txt")) Then
    42. Return "text/plain"
    43. ElseIf (httpRequest.EndsWith("gif")) Then
    44. Return "image/gif"
    45. ElseIf (httpRequest.EndsWith("jpg")) Then
    46. Return "image/jpeg"
    47. ElseIf (httpRequest.EndsWith("jpeg")) Then
    48. Return "image/jpeg"
    49. ElseIf (httpRequest.EndsWith("pdf")) Then
    50. Return "application/pdf"
    51. ElseIf (httpRequest.EndsWith("pdf")) Then
    52. Return "application/pdf"
    53. ElseIf (httpRequest.EndsWith("doc")) Then
    54. Return "application/msword"
    55. ElseIf (httpRequest.EndsWith("xls")) Then
    56. Return "application/vnd.ms-excel"
    57. ElseIf (httpRequest.EndsWith("ppt")) Then
    58. Return "application/vnd.ms-powerpoint"
    59. Else
    60. Return "text/plain"
    61. End If
    62. End Function

    Hier ein Print von der Konsole (siehe Anhang)
    Laut Konsole ist der Fehler bei "Dim streanReader as StreamReader(httpRequest, Encoding.Default)

    Könnt ihr mir weiterhelfen? wäre ganz nett :)

    mfg

    PS: Der vorherige Fehler hat sich geregelt.
    Bilder
    • Unbenannt.PNG

      89,35 kB, 680×417, 144 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „gfcwfzkm“ ()

    VB.NET-Quellcode

    1. Private Sub sendHTMLResponse(ByVal httpRequest As String)
    2. ' Datei(en) senden
    3. Dim Reader As StreamReader = New StreamReader(httpRequest, Encoding.Default)
    4. Dim strBuff As String = Reader.ReadToEnd()
    5. Reader.Close()
    6. Dim respByte() As Byte = Encoding.Default.GetBytes(strBuff)
    7. ' Header einstellen
    8. Dim htmlHeader As String = _
    9. "HTTP/1.0 200 OK" & Environment.Newline & _
    10. "Server: WebServer 0.6 [beta]" & Environment.Newline & _
    11. "Content-Length: " & respByte.Length & Environment.Newline & _
    12. "Content-Type: " & getContentType(httpRequest) & _
    13. Environment.Newline & Environment.Newline
    14. ' Grösse einstellen
    15. Dim headerByte() As Byte = Encoding.ASCII.GetBytes(htmlHeader)
    16. Console.WriteLine("HTML Header: " & ControlChars.CrLf & htmlHeader)
    17. ' Zurück zum client senden (HTML)
    18. clientSocket.Send(headerByte, 0, headerByte.Length, SocketFlags.None)
    19. ' Zurück zum Client senden (anhänge, bilder...)
    20. clientSocket.Send(respByte, 0, respByte.Length, SocketFlags.None)
    21. ' Verbindung beenden
    22. clientSocket.Shutdown(SocketShutdown.Both)
    23. clientSocket.Close()
    24. If clientSocket.Connected Then clientSocket.Close()
    25. End Sub
    26. ' Datei-Typen
    27. Private Function getContentType(ByVal httpRequest As String) As String
    28. Hier bitte Select Case !
    29. If (httpRequest.EndsWith("html")) Then
    30. Return "text/html"
    31. ElseIf (httpRequest.EndsWith("htm")) Then
    32. Return "text/html"
    33. ElseIf (httpRequest.EndsWith("txt")) Then
    34. Return "text/plain"
    35. ElseIf (httpRequest.EndsWith("gif")) Then
    36. Return "image/gif"
    37. ElseIf (httpRequest.EndsWith("jpg")) Then
    38. Return "image/jpeg"
    39. ElseIf (httpRequest.EndsWith("jpeg")) Then
    40. Return "image/jpeg"
    41. ElseIf (httpRequest.EndsWith("pdf")) Then
    42. Return "application/pdf"
    43. ElseIf (httpRequest.EndsWith("pdf")) Then
    44. Return "application/pdf"
    45. ElseIf (httpRequest.EndsWith("doc")) Then
    46. Return "application/msword"
    47. ElseIf (httpRequest.EndsWith("xls")) Then
    48. Return "application/vnd.ms-excel"
    49. ElseIf (httpRequest.EndsWith("ppt")) Then
    50. Return "application/vnd.ms-powerpoint"
    51. Else
    52. Return "text/plain"
    53. End If
    54. End Function
    Mit deiner Methode kannst du nur Textdateien senden, weil die Datei als ASCII einliest und wenn es eine Binärdatei ist funktioniert das nicht, weil nicht alle Bytes der Datei zu einem String umgewandelt werden können, nutze also hier einfach die Methode IO.ReadAllBytes() damit fallen die ersten 3 Zeilen schonmal weg.