TCP mit mehreren Sprachen

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

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Quakxi.

    TCP mit mehreren Sprachen

    Hallo,
    mir war langweilig, also auf zu einem neuen Projekt:

    Prinzip:
    Boxen hängen am Raspberry Pi(Server) in dem ein USB-Stick steckt
    Python Script ließt mir alle .wav Dateien aus dem Stick aus und sendet die Dateien an meinen Rechner(Client)
    Da kann ich dann über eine Form mir die Lieder raussuchen die ich haben will

    Problem ist die Kommunikation zwischen Pi und Rechner, die Pakete kommen an(laut Wire Shark) aber mein VB-Programm ließt sie irgendwie nicht aus.

    VB-Script:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim stream As NetworkStream
    3. Dim streamw As StreamWriter
    4. Dim streamr As StreamReader
    5. Dim Client As New TcpClient
    6. Dim IP As String = "127.0.0.1"
    7. Dim Port As Integer = 4000
    8. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    9. IP = TextBox1.Text
    10. Client.Connect(IP, Port)
    11. If Client.Connected Then
    12. stream = Client.GetStream
    13. streamw = New StreamWriter(stream)
    14. streamr = New StreamReader(stream)
    15. Button4.Enabled = False
    16. send("WarteaufLieder")
    17. Dim lieder As String = ""
    18. While lieder <> "Ende"
    19. ListBox1.Items.Add(lieder)
    20. lieder = recieve()
    21. End While
    22. End If
    23. End Sub
    24. Sub send(ByVal text As String)
    25. streamw.WriteLine(text)
    26. streamw.Flush()
    27. End Sub
    28. Function recieve() As String
    29. recieve = streamr.ReadToEnd
    30. End Function


    Mein Python Script:

    XML-Quellcode

    1. import socket
    2. import pyglet
    3. import os
    4. import time
    5. verbunden = False
    6. TCP_IP = '192.168.2.108'
    7. TCP_PORT = 4000
    8. BUFFER_SIZE = 1024
    9. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    10. lieder = []
    11. i=0
    12. def WennVerbunden():
    13. liederUn = os.listdir("/media/usb/")
    14. for lied in liederUn:
    15. if lied[0] == ".":
    16. i=1
    17. if lied != "System Volume Information":
    18. lieder.insert(len(lieder),lied)
    19. print("lieder werden gesendet")
    20. for lied in lieder:
    21. conn.send(lied)
    22. print(lied)
    23. conn.send("Ende")
    24. s.bind((TCP_IP, TCP_PORT))
    25. s.listen(1)
    26. print("Server ist bereit")
    27. conn, addr = s.accept()
    28. print 'Verbinundungsaufbau mit :', addr
    29. while 1:
    30. data = conn.recv(BUFFER_SIZE)
    31. if not data: break
    32. else:
    33. print "Verbunden mit:",addr
    34. verbunden = True
    35. WennVerbunden()
    36. conn.close()


    Ich finde einfach das Problem nicht(ich schätze es ist mal wieder irgendwas kleines)
    Intel i7-4710HQ |Nvidia GTX 860M | 1TB SSHD| 8GB RAM 1600Mhz :saint:
    Intel Core Duo2 | 320GB | 4 GB RAM | Linux Debian :D
    AMD E-350 | 320GB| 6GB RAM :thumbdown:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Quakxi“ ()

    beim senden sowie beim lesen brauchst du aufjedenfall irgendeinen Seperator, ansonsten kannst du ja kaum die Lieder voneinander unterscheiden.
    ich glaube außerdem, dass die schleife über die lieder falsch ist, könnte auch die Einrückung im Forum sein.
    ReadToEnd() liest bei Sockets nur, wenn die Verbindung geschlossen würde, d.h. du bekommst nicht die Dinge, die du einzeln sendest, sondern bekommst sobald die Verbindung geschlossen wird alle Daten aufeinaml schön zusammenhängend->Deshalb der Seperator
    In deinem Code wird die While-schleife niemals aufhören, zwar wird nach dem ersten receive aufruf bereits "Ende" im String vorhanden sein, aber auch die Lieder->Endlosschleife
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---