German TCP: Visual Basic 2010 Server mit B4A Clients

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
 

danebn11

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

Visual Basic Server:

B4X:
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:

B4X:
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" , 8000, 20000)
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
 

DonManfred

Expert
Licensed User
Longtime User

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
 

OliverA

Expert
Licensed User
Longtime User
Es kommt nur am Android Gerät die Meldung "Error Connecting"
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.
 

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?
 
Top