German TCP: Visual Basic 2010 Server mit B4A Clients

Discussion in 'German Forum' started by danebn11, Oct 4, 2017.

  1. danebn11

    danebn11 Member Licensed User

    Hallo Leute,

    ich bin absolut neu bei B4A und habe noch nie ein Projekt mit TCP gemacht.

    Ich habe schon alle möglichen Varianten, die ich im Forum gefunden habe probiert, doch keine gefunden die mir eine Kommunikation ermöglicht.

    Mein Problem:
    Ich würde gerne von mehreren Android Geräten, auf denen eine B4A App läuft, Daten (vlt Strings oder Bytes) zu meinen PC (Visual Basic 2010 Server) senden, wo ich diese weiterverarbeiten kann.

    Hat jemand von euch schon Mal so eine Verbindung programmiert?

    Ich habe leider keine Ahnung, wie ich dieses Thema angehen soll, doch ich bräuchte dringend diese Verbindung.

    Danke im Voraus
     
  2. danebn11

    danebn11 Member Licensed User

    Hier sende ich meinen versuchten Code... kann mir jemand sagen was falsch sein könnte?

    Visual Basic Server:

    Code:
    Imports System.Net.Sockets
    Imports System.IO
    Imports System.Net

    Module Module1
        
    Private server As TcpListener
        
    Private client As New TcpClient
        
    Private ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 8000' eingestellt ist port 8000. dieser muss ggf. freigegeben sein!
        Private list As New List(Of Connection)
        
    Private Structure Connection
            
    Dim stream As NetworkStream
            
    Dim streamw As StreamWriter
            
    Dim streamr As StreamReader
            
    Dim nick As String ' natürlich optional, aber für die identifikation des clients empfehlenswert.
        End Structure
        
    Private Sub SendToAllClients(ByVal s As String)
            
    For Each c As Connection In list ' an alle clients weitersenden.
                Try
                    c.streamw.WriteLine(s)
                    c.streamw.Flush()
                
    Catch
                
    End Try
            
    Next
        
    End Sub
        
    Sub Main()
            Console.WriteLine(
    "Der Server läuft!")
            
    server = New TcpListener(ipendpoint)
            
    server.Start()
            
    While True ' wir warten auf eine neue verbindung...
                client = server.AcceptTcpClient
                
    Dim c As New Connection ' und erstellen für die neue verbindung eine neue connection...
                c.stream = client.GetStream
                c.streamr = New StreamReader(c.stream)
                c.streamw = New StreamWriter(c.stream)
                
    'c.nick = c.streamr.ReadLine ' falls das mit dem nick nicht gewünscht, auch diese zeile entfernen
                list.Add(c) ' und fügen sie der liste der clients hinzu.
                'Console.WriteLine(c.nick & " has joined.")
                ' falls alle anderen das auch lesen sollen können, an alle clients weiterleiten. siehe SendToAllClients
                Dim t As New Threading.Thread(AddressOf ListenToConnection)
                t.Start(c)
            
    End While
        
    End Sub
        
    Private Sub ListenToConnection(ByVal con As Connection)
            
    Do
                
    Try
                    
    Dim tmp As String = con.streamr.ReadLine ' warten, bis etwas empfangen wird...
                    Console.WriteLine(con.nick & ": " & tmp)
                    SendToAllClients(con.nick & 
    ": " & tmp) ' an alle clients weitersenden.
                Catch ' die aktuelle überwachte verbindung hat sich wohl verabschiedet.
                    list.Remove(con)
                    Console.WriteLine(con.nick & 
    " has exit.")
                    
    Exit Do
                
    End Try
            
    Loop
        
    End Sub
    End Module
    B4A Client:

    Code:
    Sub Process_Globals
        
    Dim Socket1 As Socket
    End Sub

    Sub Globals

    End Sub

    Sub Activity_Create(FirstTime As Boolean)
        Socket1.Initialize(
    "Socket1")
        Socket1.Connect(
    "192.168.2.125" , 800020000)
    End Sub

    Sub Socket1_Connected (Successful As Boolean)
        
    If Successful = False Then
            
    Msgbox(LastException.Message, "Error connecting")
            
    Return
        
    End If
        
    Dim tr As TextReader
        tr.Initialize(Socket1.InputStream)
        
    Dim sb As StringBuilder
        sb.Initialize
        sb.Append(tr.ReadLine) 
    'read at least one line
        Do While tr.Ready
            sb.Append(
    CRLF).Append(tr.ReadLine)
        
    Loop
        
    Msgbox("Time received: " & CRLF & sb.ToString, "")
        Socket1.Close
    End Sub
     
  3. DonManfred

    DonManfred Expert Licensed User

  4. danebn11

    danebn11 Member Licensed User

    Danke für die schnelle Rückmeldung

    Es kommt nur am Android Gerät die Meldung "Error Connecting"
    Ich weiß aber nicht, warum es keine Verbindung herstellen kann
     
  5. OliverA

    OliverA Well-Known Member Licensed User

    Kann sein:

    IP Addresse falsch
    "Server" Firewall nicht richtig eingestellt
    etc.

    Versuch einmal von einer anderen Windows Maschine mit Putty eine RAW Verbindung zu 192.168.2.125 auf Port 8000 zu erstellen.
     
  6. danebn11

    danebn11 Member Licensed User

    Danke

    Firewall komplett deaktivieren hat funktioniert...allerdings funktioniert die Datenübertragung noch nicht so richtig

    Ich habe jetzt das Programm aus deinem Link probiert in B4J und B4A...dieses funktioniert eigentlich super, doch weißt du ob es eine Möglichkeit gibt mehrere Clients zu verbinden?
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice