float wert von Smartphone per Bluetooth empfangen

mihe7

mihe7

Top Contributor
Test erst mal den Server:
  1. Bau eine Testausgabe ein, z. B. nach sSocket.accept(). Die sollte ausgegeben werden, sobald eine Verbindung zustande kommt.
  2. Nimm einen Client wie putty (oder, wenn Du unter Linux unterwegs bist geht auch telnet). Verbinde Dich mit Deinem Server, Tipp eine Zeile ein, schau was der Server macht.
Wenn das funktioniert, liegt der Fehler beim Client.
 
J

Javaman91

Bekanntes Mitglied
Hallo,

was bedeuten diese Fehlermeldungen:

java.io.EOFException
0.0
at java.io.DataInputStream.readFully(DataInputStream.java:197)
at java.io.DataInputStream.readLong(DataInputStream.java:416)
at java.io.DataInputStream.readDouble(DataInputStream.java:468)
at WLAN.main(WLAN.java:25)

Bei "at WLAN.main(WLAN.java:25)" wird immer diese Zeile markiert:

Code:
test = reader.readDouble();
 
mihe7

mihe7

Top Contributor
Du versuchst ein Double aus dem Stream zu lesen aber der Stream endet, bevor es komplett gelesen werden konnte.
 
J

Javaman91

Bekanntes Mitglied
Danke für deine Antwort.

Das muss dann aber ein Android seitiges Problem sein.
Ich muss mir das nochmal genau ansehen.

SG
 
J

Javaman91

Bekanntes Mitglied
Hier der Code:

Android:
Code:
class BackgroundTask extends AsyncTask<String, Void, String>
{
    @Override
    protected String doInBackground(String... voids) {

        while (true){
            try {
            socket = new Socket("192.168.0.164", 6000);
            writer = new PrintWriter(socket.getOutputStream());
            writer.write(String.valueOf(probieren));
            writer.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    }
}

Eclipse: (Die while-Schleife fehlt hier noch)
Code:
public static void main(String[] args){
      
       try {
           sSocket = new ServerSocket(6000);
           socket = sSocket.accept();       
           reader = new DataInputStream(socket.getInputStream());
           test = reader.readDouble();
           System.out.println(test);
                 
       } catch (IOException e) {
           e.printStackTrace();
       }
   }

Mit dem String hat es funktioniert.
Nur mit einem double nicht.
 
mihe7

mihe7

Top Contributor
Naja, du kannst nicht einfach ein Double per PrintWriter rausschreiben und per DataInputStream einlesen.
 
J

Javaman91

Bekanntes Mitglied
Ich habe das so in einem Beispiel gesehen. Mit "String.valueOf (double variable)" sollte es funktionieren.
 
mihe7

mihe7

Top Contributor
Du schreibst die Textdarstellung einer Zahl und liest einen binären Wert. Das funktioniert nicht - Beispiel hin oder her :)

Wenn Du zum Beispiel "1.0" (als Text) rausschreibst, sind das 3 Bytes. Ein double benötigt 8 Bytes, daher liest DataInputStream 8 Bytes ein. Es sind nur 3 verfügbar -> EOFException. Wenn Du "1.000000" rausschreiben würdest, würde zwar keine EOFException geworfen, aber ein völlig anderer Wert rauskommen.

Nimm statt PrintWriter z. B. einen DataOutputStream.
 
J

Javaman91

Bekanntes Mitglied
Es hat funktioniert mit dem DataOutputStream, vielen Dank!

Jetzt brauche ich noch eine While-Schleife damit die Werte ständig ausgegeben werden.
Sobald ich diese einfüge bekomme ich wieder die gleichen Fehler wie zuvor.
Das gelingt mir einfach nicht, egal wie ich sie einsetze es kommt immer der gleiche Fehler.

Wie kann ich hier eine Schleife einbauen?

SG
 
mihe7

mihe7

Top Contributor
Dein Client verbindet sich, liest einen Wert aus und beendet dann die Verbindung. Dein Server muss im Prinzip das gleiche machen: accept, write, close, accept, write, close, ...
 
J

Javaman91

Bekanntes Mitglied
Hallo Leute,

das Programm funktioniert mittlerweile, die Werte werden übertragen.
Nachdem ich ich mein kleines Testprogramm in mein Game eingebaut habe, läuft das Spiel nur mehr in Zeitlupe ab.
Es liegt definitiv am Wlan sourcecode.
Was genau der Grund ist, konnte ich noch nicht feststellen.

Danke für die Hilfe!

SG
 
K

kneitzel

Gast
Wenn du immer die Verbindung aufbaust und nach einem Wert beendest, dann ist das natürlich langsam.

Bau die Verbindung ein mal auf und nutze sie dann solange wie du sie brauchst.
 

Ähnliche Java Themen

Anzeige

Neue Themen


Oben