German mehrer Fragen Bezgl. einen Text an einen PC schicken

arautio

Member
Licensed User
Longtime User
Hallo,
ich möchte z.B. "Hallo" an ein Windwos pc schicken,
habe schon mehrer Sachen ausprobiert dies bezüglich komme aber nicht weiter:

1. Was muss auf dem Windows pc laufen das diese Message mit Hallo erscheint.
Alle geräte befinden sich im selben wlan netz
2. Der Text wird immer von android auf windows geschickt.

Kann mir jemand einen Tip geben ?
Besten Dank
 

DonManfred

Expert
Licensed User
Longtime User
Du brauchst auf windows-Seite einen Service der die Daten entgegen nimmt und sie anzeigt.

Es böte sich an ein Windows-Programm zu schreiben welches einen http-Server beinhaltet (da ist dann das "zusenden" recht einfach mittels http2utils zu realisieren).

Alternativ könnte man natürlich auch ein XAMPP aufsetzen welches die Daten über PHP annimmt. ABER dann brauchste noch ein Tool welches die Anzeige macht. In einer einfacher Version könnte das ein PHP-Script sein welches die Daten in einem Ordner als Text ablegt und ein 000anderes Programm sucht regelmässig in diesem Ordner und zeigt neue Nachrichten dann in einem Fenster an.
 

arautio

Member
Licensed User
Longtime User
Danke für die Antwort

Hallo und Danke mal, aber kannst Du mir auch sagen da ich mich in PHP mal gar nicht auskenne, und mit Server auch nicht gerade.
WIndows Programm, dass ein HTTP Server beinhaltet, kannst Du mir das kurz erklären.... wäre sehr dankbar
 

DonManfred

Expert
Licensed User
Longtime User
Hallo und Danke mal, aber kannst Du mir auch sagen da ich mich in PHP mal gar nicht auskenne, und mit Server auch nicht gerade.
WIndows Programm, dass ein HTTP Server beinhaltet, kannst Du mir das kurz erklären.... wäre sehr dankbar

Also die PHP-Variante würde sich sicher einfach und recht schnell schreiben lassen. Wenn ich am wochenende was Zeit finde kann ich Dir gerne ein kleines Beispiel schreiben. Diese Variante bräuchte dann auf dem Zielrechner ein installiertes und laufendes XAMPP oder WAMPP.

Zu der Windowssoftware welches einen http-Server beinhaltet; das ist natürlich ein wenig komplizierter bzw da brauchste dann noch weitere Programmierkenntnisse. C++, C#, Delphi, usw... Ist mit jeder von diesen Sprachen realisierbar.

Wie hast du Dir das denn vorgestellt wie das "Hallo" auf dem Zielrechner dann erscheinen soll? Also aussehen. Windowsfenster was aufpoppt? Bubble in der Takbar welches angezeigt wird...

Das müsstest Du schon ein wenig konkreter formulieren was genau Du da erreichen willst.

Und mit Servern muss man sich dazu auch nicht auskennen. Wenn die alle im gleichen (W-)LAN hängen dann ist der Zugriff (das Senden des "Hallo" ja kein Problem wenn der Port der da angesprochen wird frei ist bzw in der Firewall freigegeben.

Eine weitere Variante wäre es wenn ein php-Script (siehe oben) die Daten annnimmt und in eine Datenbank schreibt (ist bei XAMPP o. WAMPP dabei) und ein windows-Programm holt sich diese "neuen" Daten dann aus der Datenbank ab und zeigt sie an.

Möglichkeiten gibt es sicher eine Menge. Aber dazu müsste man halt wirklich wissen was genau benötigt wird, wieviele Rechner da so mit dem anzeigen von "Hallo" beschäftigt werden sollen und sowas halt. Je mehr infos man hat dasto einfach lässt sich ermitteln was da am sinnvollsten ist.
 
Last edited:

GMan

Well-Known Member
Licensed User
Longtime User
Hallo,

alles was Du dafür brauchst ist ein TerminalProgramm auf dem PC (und natürlich eine Verbindung zwischen Android und PC).
Du stellst das Terminalprogramm auf den Port ein, an dem das Device verbunden ist (z.B. COM1) und schön werden die empfangenen Daten dargestellt.

Wichtig dabei sind nur die Parameter, also z.B. 9600,8,N,1

Gruß
GMan
 

DonManfred

Expert
Licensed User
Longtime User
alles was Du dafür brauchst ist ein TerminalProgramm auf dem PC (und natürlich eine Verbindung zwischen Android und PC).
Du stellst das Terminalprogramm auf den Port ein, an dem das Device verbunden ist (z.B. COM1) und schön werden die empfangenen Daten dargestellt.

Der TE sprach von Geräten (also Mehrzahl). Dein Vorschlag bezieht sich nur auf den PC an dem das Android-Device gerade angeschlossen ist. Ich bin mir nicht sicher das er das so meinte.

Mal davon abgesehen ist ein Terminal ja nicht gerade übersichtlich in der Erscheinung. Ich würde da ein Windows-Programm zur Anzeige eher bevorzugen. ABER das spiegelt natürlich nur meine persönliche Meinung zu dem ganzen.

Mit Terminalprogrammen habe ich vor 25 Jahren in meiner DFÜ-Zeit genug rumhantiert um für mich entscheiden zu können das ich das heute nicht mehr haben muss :D
 

GMan

Well-Known Member
Licensed User
Longtime User
Der TE sprach von Geräten (also Mehrzahl). Dein Vorschlag bezieht sich nur auf den PC an dem das Android-Device gerade angeschlossen ist. Ich bin mir nicht sicher das er das so meinte.

Mal davon abgesehen ist ein Terminal ja nicht gerade übersichtlich in der Erscheinung. Ich würde da ein Windows-Programm zur Anzeige eher bevorzugen. ABER das spiegelt natürlich nur meine persönliche Meinung zu dem ganzen.

Mit Terminalprogrammen habe ich vor 25 Jahren in meiner DFÜ-Zeit genug rumhantiert um für mich entscheiden zu können das ich das heute nicht mehr haben muss :D

Nun ja, jetzt hast Du viel darüber geschrieben was er und ich wohl meine/meinen könnte.
Einen konstruktiven Vorschlag konntest Du aber nicht beibringen...

Die Frage war ja auch nicht so spezifisch in Hinsicht auf Komfort - es ging nur darum, ein "Wort" vom Android an PC zu senden.

Empfehle daher immer noch ein Terminalproggi - denn er sollte sich ja erstmal über den Weg der Kommunikation klar werden, programmieren muss er eh selber was auf dem Windows PC wenn er Komfort / Auswertung der Daten haben will.
Dafür empfehle ich Visual Basic, da es B4A stark ähnelt :sign0089:
 

arautio

Member
Licensed User
Longtime User
Hallo und ich bin froh das jemand antwortet

1. es sind 2 Tablet die per wlan mit einem Windows rechner verbunden sind.
2. in meinem Programm bilde ich einen Textstring, der irgend etwas an Text beinhaltet, z.B. IP Adresse und einen Text.
Am Windows rechner können die Fenster immer offen bleiben oder wenn eine Nachricht erscheint ein Fenster aufgehen, spielt keine Rolle.
3. Mir gehts darum, Verbindung zu meinen Windowsrechner und die Message die am tablet eingegeben worden sind anzuzeigen, das Tablet braucht keinen empfang die strecke ist immer nur Tablet - pc. PC muss immer auf lauschen sein. Ich will nichts auswerten nur die Anzeige haben
Ich habe heute fast alles ausprobiert was ich hier so gefunden habe, leider komme ich wirklich nimmer weiter und danke euch im voraus

In VB habe ich gedacht es wäre mit diesem kleinen Programm getan, das immer an ist, wollte diese in basic4app hinbekommen, aber ich stehe echt auf dem schlauch
aber ich bekomme den text nicht vom tablet in die message geschrieben
Port 8000 ist frei geschaltet



Imports System.Net.Sockets, System.Threading, System.IO
Public Class Form1
Dim listener As New TcpListener(8000)
Dim client As TcpClient
Dim message As String



Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
listener.Stop()
Application.Exit()
End Sub

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'tablet Tcip 1 = "192.168.177.31" tablet 2 = 192.168.177.32
listener.Start()
Dim listthread As New Thread(New ThreadStart(AddressOf listening))
listthread.Start()

End Sub
Private Sub listening()
listener.Start()

End Sub


Private Sub tmrlistener_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrlistener.Tick
If listener.Pending = True Then
message = ""
client = listener.AcceptTcpClient()
Dim reader As New StreamReader(client.GetStream())
While reader.Peek > -1
message = message + Convert.ToChar(reader.Read()).ToString

End While
rtbRecieveText.AppendText(message)
End If
End Sub
End Class
 
Last edited:

GMan

Well-Known Member
Licensed User
Longtime User
Hallo,

OK, WLAN ist natürlich eine ganz andere Baustelle :)

Fangen wir doch mal auf der Senderseite an - zeig doch mal, wie Du da den Text versendest...
Gruß
 

arautio

Member
Licensed User
Longtime User
Das ist das Problem,

ich dachte ich kann dass was ich als empfänger habe auch in basic4androids als sender nehmen, also einfach so einen kleinen netchat über tcip.

Jetzt habe ich das gefunden, angeblich hat er verbindung zu meiner Box, aber ich bekomme das Hello, nicht angezeigt und auf der gegenseite hat er keine Verbindung

Sub Process_Globals
Dim AStreams As AsyncStreams
Dim Server As ServerSocket
Dim Socket1 As Socket
Dim port As String
Dim ServerIp As String



End Sub
Sub Globals

Dim Button1 As Button
Dim Button2 As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("1")


port = 9092
ServerIp="192.168.176.38"

End Sub



Sub connet
Try
Socket1.Initialize("Socket1")
Socket1.Connect(ServerIp ,port, 20000)
Catch
ToastMessageShow( "Non conesso", True)
End Try
End Sub


Sub Socket1_Connected (Connected As Boolean)
If Connected = True Then
ToastMessageShow( "Connesso", True)
AStreams.Initialize(Socket1.InputStream,Socket1.OutputStream,"Astreams")
End If
End Sub

Sub send_data(data As String)

If AStreams.IsInitialized = True Then
Dim buffer() As Byte
data=data
buffer = data.GetBytes("UTF8")
AStreams.Write(buffer)
End If
End Sub

Sub AStreams_NewData (Buffer() As Byte)
Dim msg As String
msg = BytesToString(Buffer, 0, Buffer.Length, "UTF8")
ToastMessageShow( msg, True)
End Sub

Sub AStreams_Error
ToastMessageShow( LastException.Message, True)
End Sub

Sub Button1_Click
connet
End Sub
Sub Button2_Click
send_data("hello!")
End Sub
 
Last edited:

GMan

Well-Known Member
Licensed User
Longtime User
Yo, schon richtig gedacht - das funktioniert ja auch.
Aber nu zeig doch mal her was Du hast damit man zu einer Lösung kommt.
 
Last edited:

arautio

Member
Licensed User
Longtime User
OK

Sorry, ich habe nicht gesehen dass du geantwortet hast, sah immer nur auf Seite 1.
So das was ich bis jetzt habe für basic4Android und das was ich vorher schon reingestellt habe als Visual Basic, das rein auf TCPIp arbeite, ich habe die Chat Variante geändert, so dass ich nur empfange( wollte er mir einfach machen, da ich es bis jetzt noch nicht hinbekommen habe, ein einfaches Chatprogramm ohne Server hier zu erstellen. Ich hoffe die Angaben reichen dir.
Besten Dank

Declaration:
Dim xSocket As Socket
Dim xAsyncStream As AsyncStreams
Dim ip As String : ip = "192.168.177.21"
Dim port As Int: port = 8000


Sub Activity_Create(FirstTime As Boolean)
xSocket.Initialize("Client")
xSocket.Connect(ip,port,20000)
' Das mache ich, dass ich sofort beim Start eine Verbindung habe
end sub

Sub Client_Connected(ConStatus As Boolean)
If ConStatus = True Then
ToastMessageShow( "Tablet ist angemeldet",False)


Dim xtext() As Byte
xtext = Nic.GetBytes("UTF8") ' Nic ist string und in diesem string steht zum Beispiel Hallo
xAsyncStream.InitializePrefix(CltSock.InputStream, False, CltSock.OutputStream, "AStreams")
xAsyncStream.Write(xtext)
ToastMessageShow("Datentransfer ist getartet",False)
Else
Msgbox(LastException.Message, "Derzeit keine Verbindung zum Server möglich")

End If
End Sub



Sub NeueNachrichtSchicken
xMessage = cd2.Show("Neue Nachricht abschicken", "Ja", "Abbruch", "", bmpIcon)
'--------------------------------------

'-1 positive, -3 cancel
Select xMessage
Case DialogResponse.POSITIVE
Msgbox("Nachricht wird abgeschickt.","Bestellung")

clienttesten
DatenSenden

Case DialogResponse.CANCEL
Msgbox("Abbruch der Sendens, Text muss neu eingegeben werden","Text Senden")

Case DialogResponse.NEGATIVE
'nothing

End Select
'--------------------------------

End Sub

Sub clienttesten ' Das mache ich falls im laufe der zeit die Verbindung nicht mehr vorhanden ist
If xAsyncStream.IsInitialized =False Then
xsocket.Initialize("Client")
xsocket.Connect(ip,port,20000)
End If
End Sub


Sub DatenSenden


If xAsyncStream.IsInitialized = False Then Return
Dim Buffer as Byte
if NeuerText.Length >0 then
buffer = NeuerText.Getbytes("UTF8")

xAsyncStream.Write(buffer)

ToastMessageShow("Gesendet:" ,False)
End If

End Sub
 
Last edited:

GMan

Well-Known Member
Licensed User
Longtime User
Ich habe Deine Codes probiert mit demselben Ergebnis - nämlich keinem ;)
Wenn ich den Port allerdings auf 9092 ändere, funktioniert das tadellos :D

Würde es bei Dir auch - in B4A hast Du 9092 festgelegt, in VBE 8000 ;)

Hier der Code (VBE2010):
B4X:
Imports System.Net.Sockets, System.Threading, System.IO
Public Class Form1
    Dim listener As New Net.Sockets.TcpListener(9092) '32118
    Dim client As TcpClient
    Dim message As String



    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs)
        listener.Stop()
        Application.Exit()
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'tablet Tcip 1 = "192.168.177.31" tablet 2 = 192.168.177.32
        listener.Start()
        Dim listthread As New Thread(New ThreadStart(AddressOf listening))
        listthread.Start()

    End Sub
    Private Sub listening()
        listener.Start()

    End Sub


    Private Sub tmrlistener_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrlistener.Tick
        If listener.Pending = True Then
            message = ""
            client = listener.AcceptTcpClient()
            Dim reader As New StreamReader(client.GetStream())
            While reader.Peek > -1
                message = message + Convert.ToChar(reader.Read()).ToString

            End While
            rtbRecieveText.AppendText(message)
        End If
    End Sub

   

End Class

Angehängt die .exe als .zip
 

Attachments

  • TCPlistener.zip
    112 KB · Views: 270
Last edited:

arautio

Member
Licensed User
Longtime User
Hallo und danke aber 2.Fragen:

1. das bekomme ich im Client angezeigt eine umgedretes T
2. Kann es nur an dem Port liegen ?
Beim ersten verbinden beim 2. wegschicken eines Textes zeigt er nichts mehr an
So habe es mit der exe datei als auch mit dem heir gezeigten Text ausprobiert:
Mein Programm sagt Verbindung da, aber nichts mehr an Text
 
Last edited:

GMan

Well-Known Member
Licensed User
Longtime User
1. das bekomme ich im Client angezeigt eine umgedretes T
2. Kann es nur an dem Port liegen ?
Beim ersten verbinden beim 2. wegschicken eines Textes zeigt er nichts mehr an
So habe es mit der exe datei als auch mit dem heir gezeigten Text ausprobiert:
Mein Programm sagt Verbindung da, aber nichts mehr an Text

Du musst vor jedem Mal senden auf CONNECT in der App drücken, da die Verbindung (Asynchron) nach Senden der Daten wieder getrennt wird.
 

arautio

Member
Licensed User
Longtime User
OK das habe ich verstanden

aber der text wird nicht angezeigt nur diese zeichen ich habe es auch mal mit TestclientSocket ausprobiert auch hier kommen nur die zeichen und keine Buchstaben oder sätze
 

GMan

Well-Known Member
Licensed User
Longtime User
Versuch doch bitte mal diesen Code:
B4X:
Sub Process_Globals
   'These global variables will be declared once when the application starts.
   'These variables can be accessed from all modules.
Dim AStreams As AsyncStreams 
Dim Server As ServerSocket 
Dim Socket1 As Socket
Dim port As String
Dim ServerIp As String
End Sub

Sub Globals
   'These global variables will be redeclared each time the activity is created.
   'These variables can only be accessed from this module.
Dim Button1 As Button
Dim Button2 As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
   'Do not forget to load the layout file created with the visual designer. For example:
   'Activity.LoadLayout("Layout1")
Activity.LoadLayout("1")
port = 9092
ServerIp="192.168.178.26"
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub connet
Try 
Socket1.Initialize("Socket1")
Socket1.Connect(ServerIp ,port, 20000)
Catch 
ToastMessageShow( "Non conesso", True) 
End Try 
End Sub


Sub Socket1_Connected (Connected As Boolean) 
If Connected = True Then 
ToastMessageShow( "Connesso", True) 
AStreams.Initialize(Socket1.InputStream,Socket1.OutputStream,"Astreams") 
End If
End Sub

Sub send_data(data As String)

If AStreams.IsInitialized = True Then 
Dim buffer() As Byte 
data=data
buffer = data.GetBytes("UTF8") 
AStreams.Write(buffer) 
End If
End Sub

Sub AStreams_NewData (Buffer() As Byte)
Dim msg As String 
msg = BytesToString(Buffer, 0, Buffer.Length, "UTF8") 
ToastMessageShow( msg, True)
End Sub

Sub AStreams_Error 
ToastMessageShow( LastException.Message, True)
End Sub

Sub Button1_Click
connet
End Sub
Sub Button2_Click
send_data("hello!")
End Sub
Im 1.bal einfach nur 2 Buttons plazieren...
 

arautio

Member
Licensed User
Longtime User
Hey

Hallo, hattes du es mal getest?
er hat conect, leider zeigt er keine zeichen wie hallo an, weiterhin wenn ich deine exe Datei nehme, bei dieser hängt das system, bzw. dieses Programm ist dann in der schleife, und ich bekomme es ganz schwer abgeschaltet.
Mit dem Hallo senden, an einem Multiserver bekomme ich die Zeichen angezeigt in diesem Nicht ...... Kannst Du dich mir nochmals annehmen?
 

GMan

Well-Known Member
Licensed User
Longtime User
Was hast Du denn für ein OS laufen auf dem PC ?
Und welche Android-Version auf den Tablets ?
 

arautio

Member
Licensed User
Longtime User
Tablet hat 4.0.3 und pc ist ein win 7

ich mache die test immer vom tablet zum pc nichts im emulator


Das ist das Konsolenprogramm bei dem die Verbindung funktionirt, ich bekomme zwar als erstes zeichen immer ein Schrott angezeigt also mal ein # Zeichen oder % zeichen aber der text geht rüber.

Hier das Programm



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, 9092)
Private list As New List(Of Connection)

Private Structure Connection
Dim stream As NetworkStream
Dim streamw As StreamWriter
Dim streamr As StreamReader
End Structure

Dim DateAndTime As Object

Private Property MsgBox As String

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)


list.Add(c) ' und fügen sie der liste der clients hinzu.

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(tmp)
For Each c As Connection In list ' an alle clients weitersenden.
Try

c.streamw.WriteLine(tmp & xnic)
'c.streamw.WriteLine(tmp)

'c.streamw.WriteLine(xnic)
c.streamw.Flush()
Catch
End Try
Next
Catch ' die aktuelle überwachte verbindung hat sich wohl verabschiedet.
list.Remove(con)

Console.WriteLine("Tablet ist abgemeldet.")
'Dim a As String

Exit Do
End Try
Loop
End Sub
End Module
 
Top