• Wir präsentieren Dir heute ein Stellenangebot für einen Java Entwickler - m/w/d in Augsburg, München, Stuttgart oder Bamberg. Hier geht es zur Jobanzeige

Android to Pi | Websocket Problem

K

Kiwi_gamer01

Mitglied
Ich habe eine Android App welche einen command meinen Pi sendet
btnUp sendet up
btnDown sendet down
btnstop sendet stop

Code am Handy:

Java:
package com.example.wifi_rasp;

import android.os.AsyncTask;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.util.Log;

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class MainActivity extends AppCompatActivity {
//UI Element
Button btnUp;
Button btnDown;
Button btnStop;
EditText txtAddress;
Socket myAppSocket = null;
public static String wifiModuleIp = "";
public static int wifiModulePort = 0;
public static String CMD = "0";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btnUp = (Button) findViewById(R.id.btnUp);
btnDown = (Button) findViewById(R.id.btnDown);
btnStop = (Button) findViewById(R.id.btnStop);

txtAddress = (EditText) findViewById(R.id.ipAddress);

btnUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getIPandPort();
CMD = "up";
Socket_AsyncTask cmd_increase_servo = new Socket_AsyncTask();
cmd_increase_servo.execute();
}
});
btnDown.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getIPandPort();
CMD = "down";
Socket_AsyncTask cmd_increase_servo = new Socket_AsyncTask();
cmd_increase_servo.execute();
}
});
btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getIPandPort();
CMD = "stop";
Socket_AsyncTask cmd_increase_servo = new Socket_AsyncTask();
cmd_increase_servo.execute();
}
});

}
public void getIPandPort()
{
String iPandPort = txtAddress.getText().toString();
Log.d("MYTEST","IP String: "+ iPandPort);
String temp[]= iPandPort.split(":");
wifiModuleIp = temp[0];
wifiModulePort = Integer.valueOf(temp[1]);
Log.d("MY TEST","IP:" +wifiModuleIp);
Log.d("MY TEST","PORT:"+wifiModulePort);
}
public class Socket_AsyncTask extends AsyncTask<Void,Void,Void>
{
Socket socket;

@Override
protected Void doInBackground(Void... params){
try{
InetAddress inetAddress = InetAddress.getByName(MainActivity.wifiModuleIp);
socket = new java.net.Socket(inetAddress,MainActivity.wifiModulePort);
DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataOutputStream.writeBytes(CMD);
dataOutputStream.close();
socket.close();
}catch (UnknownHostException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}
return null;
}
}
}
Bei den Pi kommt leider nicht "up" an sondern:


Code:
Waiting for connection
...connected from : ('192.168.1.XX', 52932)
u
p
als einzelne Buchstaben und nicht als ein string

Was muss ich machen das wenn up gesendet wird auch up ankommt und nicht u; p.






Code auf dem Pi: (müste unwichtig sein)
Python:
from socket import *
from time import ctime
#import Rollo
import RPi.GPIO as GPIO
import sys

#Rollo.setup()          #if necessary

ctrCmd = ['Up','Down','Stop']

HOST = ''
PORT = 21567
BUFSIZE = 1024
ADDR = (HOST,PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)

while True:
print 'Waiting for connection'
tcpCliSock,addr = tcpSerSock.accept()
print '...connected from :', addr
try:
while True:
data = ''
data = tcpCliSock.recv(BUFSIZE)
print data
if not data:
break
if data == ctrCmd[0]:
#                                Rollo.Up()
print ('Up', sys.argv)
if data == ctrCmd[1]:
#                                Rollo.Down()
print ('Down', sys.argv)
if data == ctrCmd[2]:
#                               Rollo.Stop()
print ('Stop', sys.argv)
except KeyboardInterrupt:
#                Rollo.close()          #if necessary
GPIO.cleanup()
tcpSerSock.close();
 
kneitzel

kneitzel

Top Contributor
Also Du scheinst schon genau dieses "up" zu senden und das kommt auch genau so an. Nur scheinbar liest Deine Schleife die Daten Byte für Byte ein.

Wenn ich Daten per tcp/ip versendet habe, dann habe ich immer ein klares Protokoll implementiert. Da sehe ich mehrere Möglichkeiten:
- Dein Client sendet nur einen Befehl, d.h. du lädst einfach in der Schleife so lange Daten, bis die Verbindung geschlossen wird. Dann wertest Du die empfangenen Zeichen erst aus.
- Du definierst ein Trennzeichen. Dann kann eine Verbindung auch mehrere Dinge schicken. Ein Zeilenumbruch kann hier z.B. benutzt werden. Aber prinzipiell ist es so wie oben auch: Deine Schleife liest Zeichen bis das Trennzeichen empfangen wurde. Dann wird der Puffer bis einschließlich Trennzeichen ausgewertet und der Rest bleibt aber im Puffer.
Dies muss dann meist nicht selbst geschrieben werden sondern es gibt meist eine Implementation, die Text Zeilenweise liest. Die kann man dann z.B. nutzen...

Wichtig ist halt, dass Daten in dem Stream beliebig zerstückelt und wieder zusammen gesetzt werden kann. Also wenn Du mehrere Nachrichten schickst, dann ist nur sicher gestellt, dass du alles der Reihe nach empfängst. Aber das kann in Teilschritten erfolgen. Wenn Du also die Zeilen
Zeile 1
Zeile 2
versendest, dann kann ankommen als erstes:
Zei
Dann:
le 1
Z
Dann der Rest
eile2

Nur um mal ein Beispiel aufzuzeigen.

Generell finde ich das aber interessant. Das Verhalten ist untypisch. Dieses Aufteilen erfolgt ja, weil die Daten in TCP/IP Paketen mit einer gewissen maximalen Länge versendet werden. Und die 2 Byte (writeBytes schickt pro Zeichen nur das untere Byte - also sehr beschränkt was den Zeichensatz angeht!) passen ja in ein TCP/IP Paket.... Und auf Empfangsseite hätte ich dann eigentlich erwartet, dass dies auch entsprechend ausgelesen wird.

Dann noch der Hinweis: Bitte keine Doppel-Posts. Du hast doch vor wenigen Stunden das erst gepostet! Bleib in dem Thread, den Du erstellt hast und erstelle keinen zweiten!
 
K

Kiwi_gamer01

Mitglied
Code:
Waiting for connection
...connected from : ('192.168.1.55', 46967)
u
p

Waiting for connection
...connected from : ('192.168.1.55', 46968)
s
top

Waiting for connection
...connected from : ('192.168.1.55', 46969)
d
own
kannst du mir das erkären?
 
kneitzel

kneitzel

Top Contributor
Aus welchem Grund auch immer liest er immer erst nur ein Zeichen statt gleich allen. Wie das prinzipiell aussieht habe ich ja bereits versucht zu erläutern ebenso die Lösungsideen.

Python nutze ich nicht, daher kann ich da aber nicht wirklich Codebeispiele aufbauen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Is Android Development Head First Outdated? Android & Cross-Platform Mobile Apps 3
J Android Android Datenbankverbindung zum Raspberry Pi Android & Cross-Platform Mobile Apps 1
lolcore Android Studio -Download Documentation for Android SDK Android & Cross-Platform Mobile Apps 0
S Sinnvollste weg eine SQLite DB mit Android auslesen Android & Cross-Platform Mobile Apps 7
W Problem mit Android Studio Android & Cross-Platform Mobile Apps 0
W App Abo Android Android & Cross-Platform Mobile Apps 10
OSchriever Android Android MediaPlayer bei Anruf stoppen/pausieren Android & Cross-Platform Mobile Apps 2
OSchriever Auf onClick-Listener reagieren und Parameter übergeben (Android Studio) Android & Cross-Platform Mobile Apps 4
W removeNetwork Android App mit Spendenaktion fürs Tierheim! Android & Cross-Platform Mobile Apps 1
T Android R.string.test+i Problem Android & Cross-Platform Mobile Apps 2
P undefinierbarer Fehler Android Android & Cross-Platform Mobile Apps 8
T Android ArrayList sortieren mit 2 Werten ohne thencomparing , Wie? Android & Cross-Platform Mobile Apps 10
W Variable überschreiben (Android Studio) Android & Cross-Platform Mobile Apps 2
jmar83 Android Selbst entwickelter SMTP-Client läuft auf PC, nicht aber auf Android Android & Cross-Platform Mobile Apps 9
jmar83 Android Warum muss man bei Android Studio immer 2x auf "Run" klicken damit die App auf dem Gerät startet Android & Cross-Platform Mobile Apps 8
jmar83 Android Wo das 'android.useAndroidX' property hinzufügen? Android & Cross-Platform Mobile Apps 8
jmar83 Android In einem Android-“Spinner”-Element GLEICHZEITIG Bild (links) UND Text (rechts) anzeigen Android & Cross-Platform Mobile Apps 0
P Login und Registrierung Android Anzeige Android & Cross-Platform Mobile Apps 7
S Von JavaFx zu Android Android & Cross-Platform Mobile Apps 12
jmar83 Wie fügt man bei Android Studio .jar-Libraries zu einem Android-Java-Projekt hinzu? Android & Cross-Platform Mobile Apps 33
M Komponenten positionieren in Android Studio 3.6.3 Android & Cross-Platform Mobile Apps 1
M Android Studio - Property-Fenster einblenden Android & Cross-Platform Mobile Apps 1
M Android Studio - App auf dem Smartphone testen Android & Cross-Platform Mobile Apps 7
M Barrierefreie Appentwicklung für Android - Suche Codebeispiele Android & Cross-Platform Mobile Apps 8
M Android Studio - Configuration fehlt Android & Cross-Platform Mobile Apps 20
M Wo kann ich das Android SDK herunterladen / wie kann ich es installieren Android & Cross-Platform Mobile Apps 3
M Unsupported class file major version 57 - Fehlermeldung bei Android Studio Android & Cross-Platform Mobile Apps 27
jmar83 Android Studio (SDK) ANDROID_SDK_ROOT-Variable? Android & Cross-Platform Mobile Apps 5
O Web API in Android (JAVA) einbinden Android & Cross-Platform Mobile Apps 3
J Android Studio macht seltsame Sachen Android & Cross-Platform Mobile Apps 2
J Android 9.1 aber android Studio findet API22 Android & Cross-Platform Mobile Apps 0
Dimax Web-Seite in native app convertieren mit Android Studio Android & Cross-Platform Mobile Apps 8
A Android Studio: while-Schleife beginnt nicht Android & Cross-Platform Mobile Apps 5
lolcore android studio: fehler bei laden des emulators Android & Cross-Platform Mobile Apps 10
J Android App - Browser öffnen und Text eingeben/Button click auslösen Android & Cross-Platform Mobile Apps 10
A Android-Studio: 2. Layout nach kurzer Zeit aufzeigen Android & Cross-Platform Mobile Apps 2
A jpg wird im Android Studio nicht akzeptiert Android & Cross-Platform Mobile Apps 3
J Android Studio - ArrayList - Selected Item ermitteln Android & Cross-Platform Mobile Apps 13
T Android SDK-Manager startet nicht in Eclipse Android & Cross-Platform Mobile Apps 5
T Bringen mir die Java-Basics irgendetwas für die Android-Programmierung Android & Cross-Platform Mobile Apps 4
J Was soll das bedeuten ? does not require android.permission.BIND_JOB_SERVICE permission Android & Cross-Platform Mobile Apps 7
A Android Studio: ImageView verpixelt Android & Cross-Platform Mobile Apps 2
J intend Service im Android Studio Android & Cross-Platform Mobile Apps 4
L Android Android Development eventuell mit Flutter Android & Cross-Platform Mobile Apps 1
S Android Layout - welchen Typ? Android & Cross-Platform Mobile Apps 3
T Fehler Android Studio: java.net.MalformedURLException: no protocol: http%3A%2F%2Fwww.mal ..... Android & Cross-Platform Mobile Apps 2
Arif Android Android Studio: Fehler beim Einbinden fremder Bibliothek? Android & Cross-Platform Mobile Apps 2
L Android Android Contacts DB auslesen Android & Cross-Platform Mobile Apps 1
A Android Studio - App mit Nearby Android & Cross-Platform Mobile Apps 1
L Android content URI Datei einlesen Android & Cross-Platform Mobile Apps 9
N Android Game Background Service Android & Cross-Platform Mobile Apps 11
Jackii Android Android Studio Error im Testlauf ohne zu programmieren Android & Cross-Platform Mobile Apps 9
B Android Probleme mit Android Studio Android & Cross-Platform Mobile Apps 6
Excess Android Service läuft nicht in Sandby weiter Android & Cross-Platform Mobile Apps 2
B Android Projekt für Android und IOS erstellen? Android & Cross-Platform Mobile Apps 5
J App funktioniert auf Android 5, auf 6 nicht Android & Cross-Platform Mobile Apps 2
J Android Snake Android & Cross-Platform Mobile Apps 15
J Android TaschenRechner Android & Cross-Platform Mobile Apps 22
I Das Problem mit der Tastatur... android:windowSoftInputMode="adjustPan" Android & Cross-Platform Mobile Apps 1
E Wie erhalte ich Zugriff auf das Microfon? (Android Studio) Android & Cross-Platform Mobile Apps 9
C Android Programmierung speziell oder einfach Java Buch kaufen? Android & Cross-Platform Mobile Apps 3
B Android Kein Zugriff auf Telefonspeicher (Android 6) Android & Cross-Platform Mobile Apps 1
T Android Equalizer für Android Android & Cross-Platform Mobile Apps 3
L Android Android Studio - Exportierte APK funktioniert nicht Android & Cross-Platform Mobile Apps 6
L Android Methode funktioniert nicht unter Android Android & Cross-Platform Mobile Apps 3
A Beginnen mit Serverkommunikatsion in Android Studio Android & Cross-Platform Mobile Apps 6
E Android Studio Android & Cross-Platform Mobile Apps 15
L Android Android Studio Setup killt Explorer Android & Cross-Platform Mobile Apps 3
K Android Videos rendern Android & Cross-Platform Mobile Apps 1
J Variable in strings.xml (Android Studio) Android & Cross-Platform Mobile Apps 0
B Android Android Studio lässt PC abstürzen Android & Cross-Platform Mobile Apps 3
B Android App Fehler Android & Cross-Platform Mobile Apps 21
J android Spinner funktioniert nicht Android & Cross-Platform Mobile Apps 14
G Android Push Notification Android & Cross-Platform Mobile Apps 2
Light Lux Fehlermeldung unter Android Studio Android & Cross-Platform Mobile Apps 1
D Android Android Apps direkt vom Handy aus programmieren? Android & Cross-Platform Mobile Apps 2
L Android Android Kalendar Tag Ansicht Android & Cross-Platform Mobile Apps 1
J Android Java Packet in Android Java ide hinzufügen. Android & Cross-Platform Mobile Apps 3
L Android Texterkennung für Android? Android & Cross-Platform Mobile Apps 1
L Android Chart API für Android Android & Cross-Platform Mobile Apps 0
L Android SQLite mit HSQLDB über Android synchronisieren Android & Cross-Platform Mobile Apps 13
B Android Text von Android zu PC senden? Android & Cross-Platform Mobile Apps 5
ATZENPOWER Android Probleme mit mobilen Daten via lte Android & Cross-Platform Mobile Apps 10
A Android Android Studio Emulator Problem Android & Cross-Platform Mobile Apps 1
J standardmässige Persistenz bei Android Android & Cross-Platform Mobile Apps 2
Dechasa Android Android - Canvas NullpointException Android & Cross-Platform Mobile Apps 2
S Android Studio Bluetooth App Problem Android & Cross-Platform Mobile Apps 6
L Android Android exportierte XML einlesen Android & Cross-Platform Mobile Apps 2
T Android Programm zu Android-App Android & Cross-Platform Mobile Apps 4
Florum Android FTP Upload über Android Android & Cross-Platform Mobile Apps 15
P Android Android-App Crash - Unable to start activity ComponentInfo Android & Cross-Platform Mobile Apps 2
S Android Unfortunately, the process com.android.phone has stopped Android & Cross-Platform Mobile Apps 0
Maresuke Android Android Studio & Bitbucket Android & Cross-Platform Mobile Apps 0
S Software-Tastatur des Android-Studio-Emulators öffnen? Android & Cross-Platform Mobile Apps 0
S Android Studio Emulator falsch eingestellt? Android & Cross-Platform Mobile Apps 1
S Android Problem mit Android Virtual Device erstellung. Android & Cross-Platform Mobile Apps 2
N Blackscreen bei while-Schleife? (Android-Studio) Android & Cross-Platform Mobile Apps 2
Maresuke Android Android ListView Textfarbe und Texthintergrund ändern? Android & Cross-Platform Mobile Apps 5
V Android Android Programmieren-Objekt-Konstruktor in Klammern Android & Cross-Platform Mobile Apps 2
J (Android) Bild(er) anzeigen lassen Android & Cross-Platform Mobile Apps 0

Ähnliche Java Themen

Anzeige

Neue Themen


Oben