Bytes per TCP übertragen

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Bytes per TCP übertragen

    Hallo liebe Community,
    Ich habe ein Chat Programm in dem ich ab der nächsten Version die Funktion Dateien zu übertragen anbieten möchte.
    Kennt sich einer damit aus, habs soweit fertig weiß aber nicht warum der die Bytes vom Server nicht zum Client überträgt hinzu geht aber zurück nicht.
    Es wäre nett wenn mir einer helfen könnte über TeamViewer oder so. Ist in VB geschrieben
    MfG
    ManuelSoftware

    Hier noch der Code hatte ich vergessen :) :
    Senden der Datei:

    VB.NET-Quellcode

    1. Sub SendFile(filename As String)
    2. streamw.WriteLine("bytemode on")
    3. If IO.Path.GetExtension(filename) = "" Then filename = IO.Path.ChangeExtension(filename, "file")
    4. streamw.WriteLine(filename)
    5. Dim byt = IO.File.ReadAllBytes(filename)
    6. For Each by As Byte In byt
    7. streamw.Write(by)
    8. Next
    9. MsgBox(byt.Length)
    10. streamw.WriteLine()
    11. streamw.Flush()
    12. End Sub


    Empfangen:

    VB.NET-Quellcode

    1. Dim accept As Boolean = False
    2. Dim saveFile As String = ""
    3. Dim letzterschritt As Boolean = False
    4. Private Sub Chat(ByVal s As String)
    5. If letzterschritt Then
    6. Dim bytearray As New List(Of Byte)
    7. If s.Length > 0 Then
    8. For Each charstring As String In s
    9. Dim byt As Byte
    10. If Byte.TryParse(charstring, byt) Then
    11. bytearray.Add(byt)
    12. End If
    13. Next
    14. MsgBox(s & " -- " & bytearray.Count)
    15. IO.File.WriteAllBytes(saveFile, bytearray.ToArray)
    16. MessageBox.Show("Die Datei wurde Erfolgreich Empfangen und abgespeichert!", "TenChat Client", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
    17. letzterschritt = False
    18. accept = False
    19. saveFile = ""
    20. End If
    21. Else
    22. If s.StartsWith("FileSender:: Send File - ") Then
    23. Dim nickname As String = s.Replace("FileSender:: Send File - ", "")
    24. Dim msg = MessageBox.Show("Der Benutzer " + nickname + " sendete eine Datei, willst du diese Speichern?", "TenChat Client", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    25. If msg = Windows.Forms.DialogResult.Yes Then
    26. accept = True
    27. Else
    28. accept = False
    29. End If
    30. ElseIf s.StartsWith("FileName:: ") Then
    31. If accept = True Then
    32. Dim fName As String = s.Replace("FileName:: ", "")
    33. Dim svd As New SaveFileDialog
    34. svd.Title = "Datei Speichern..."
    35. svd.FileName = IO.Path.GetFileNameWithoutExtension(fName)
    36. svd.Filter = IO.Path.GetExtension(fName).Replace(".", "").ToUpper & " - File|*" & IO.Path.GetExtension(fName)
    37. If svd.ShowDialog = Windows.Forms.DialogResult.OK Then
    38. saveFile = svd.FileName
    39. Else
    40. accept = False
    41. End If
    42. End If
    43. ElseIf s.StartsWith("Array: ") Then
    44. If accept = True Then
    45. letzterschritt = True
    46. Else
    47. letzterschritt = False
    48. End If
    49. Else
    50. If RichTextBox1.Text.Length = 0 Then
    51. RichTextBox1.Text = s
    52. Else
    53. RichTextBox1.Text = RichTextBox1.Text & vbNewLine & s
    54. End If
    55. End If
    56. End If
    57. End Sub



    Ich check da gerade nichts, kann mir jemand sagen woran das liegen kann weil ich null Ahnung von den übertragen der Bytes habe hier ist noch der Code vom Server:

    VB.NET-Quellcode

    1. Sub SendFile(bytes As String, filename As String, nick As String)
    2. For Each c As Connection In list ' an alle clients weitersenden.
    3. Try
    4. c.streamw.WriteLine("FileSender:: Send File - " + nick)
    5. c.streamw.WriteLine("FileName:: " + filename)
    6. c.streamw.WriteLine("Array: ")
    7. c.streamw.WriteLine(bytes)
    8. c.streamw.Flush()
    9. Catch
    10. End Try
    11. Next
    12. End Sub


    So wird die Sub aufgerufen:

    VB.NET-Quellcode

    1. Dim filename As String = con.streamr.ReadLine
    2. Dim bytes As String = con.streamr.ReadLine
    3. Console.WriteLine(bytes(0) + bytes(1) + bytes(2))
    4. SendFile(bytes, filename, con.nick)
    5. con.inByteMode = False


    Beiträge zusammengefügt. Wie ich sehe, kennst du die Editierfunktion; nutze sie! ~Thunderbolt

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Thunderbolt“ ()

    1. Überleg dir ein gescheites Allgemeines Protokoll
    2. Schreib dir eine gescheite Architektur für deinen Chat, wird dann auch sicher einfacher debuggbar(wenn das Problem überhaupt an einer Stelle auftritt)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Mit Strings da rumzuhantieren ist denkbar schlecht: Wieso nicht die Basis, Bytes, benutzen? Das wäre viel einfacher und würde schneller gehen, weil du dann nicht immer 100 Bytes nur für einen Command schickst. Außerdem kannst du hier mal reingucken: TCP: Datei senden (mit Statusanzeige)
    Mfg
    Vincent