Python Server / Android Client-Socket-Error

D

DMD-OL

Neues Mitglied
0
hallo zusammen
ich schicke meinem python server daten als json-string von meinem handy.
diese werden kontrolliert. bis hierhin funktioniert alles.
nun möchte ich gern vom server eine antwort bekommen, ob die daten gleich sind (also true) oder ungleich (also false) sind.
mein python server code (ausschnitt) ist:
Code:
    con = sqlite3.connect(SQL_Adressdateien)
    cursor = con.cursor()
    cursor.execute('''CREATE TABLE IF NOT EXISTS Adressenliste(id INTEGER PRIMARY KEY, ktoNum INT UNIQUE, vorName TEXT, nachName TEXT , gebDat TEXT, pLz INT, wohnOrt TEXT)''')
    cursor = con.cursor()
    cursor.execute('''SELECT ktoNum,vorName,nachName,gebDat,pLz FROM Adressenliste WHERE ktoNum=?''', (ktoNum_handy,))
    aktuellesKonto = cursor.fetchone()

    if aktuellesKonto == None:

        client.send("false")
        print 'Bitte erstmal ein Konto am PC anlegen\n'

    else:

        ktoNum = aktuellesKonto[0]
        vorName = set(aktuellesKonto[1].split(' '))
        nachName = set(aktuellesKonto[2].split(' '))
        gebDat = set(aktuellesKonto[3].split(' '))
        pLz = aktuellesKonto[4]
        wohnOrt = set(aktuellesKonto[5].split(' '))

        if ( int(ktoNum) == int(ktoNum_handy) and vorName == vorName_handy and nachName == nachName_handy and gebDat == gebDat_handy and int(pLz) == int(pLz_handy) and wohnOrt == wohnOrt_handy):  #and str(vorName) is str(vorName_handy) and str(nachName) is str(nachName_handy) and str(gebDat) is str(gebDat_handy) and str(pLz) is str(pLz_handy) and str(wohnOrt) is str(wohnOrt_handy)

            now = datetime.datetime.now()
            currentTime = now.strftime("%d.%m.%Y, %H:%M:%S")
            serverNameDatum = "Stream "+str(kontakt)+(":\n---> DMD-Server ("+currentTime+")\n")
            client.send(serverNameDatum)

            print 'gleich'

        else:
            client.send("false")
            print 'nicht gleich\n'

    kontakt += 1

    client.close()

streamSock.close()
und mein android client code (auch ausschnitt) ist:
Code:
Socket socket = null;

try {

    SocketAddress sock_addresse = new InetSocketAddress(dstAddress, dstPort);
    socket = new Socket();
    socket.connect(sock_addresse, timeoutMs);

    //Senden
    JSONObject json = new JSONObject();

    try (OutputStreamWriter writer = new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)){

        json.put("Konto",userKonto);
        json.put("Vorname",userVorname);
        json.put("Nachname",userNachname);
        json.put("Geburt",userGeburt);
        json.put("Plz",userPlz);
        json.put("Wohnort",userWohnort);
        writer.write(json.toString());

    } catch (JSONException e) {
        e.printStackTrace();
        failMessage = "Fehler JSON!" + e.toString();

    }finally {

        try {
            //response = "hallo";

            // von hier ...

            InputStream stream = new BufferedInputStream(socket.getInputStream());
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream));
            StringBuilder builder = new StringBuilder();
            String inputString;
            while ((inputString = bufferedReader.readLine()) != null) {
                builder.append(inputString);
                response = builder.toString();

              //bis hier habe ich neu eingefügt. woraus der fehler entsteht

            }
        }catch (Exception e) {
            e.printStackTrace();
            failMessage = "Fehler INPUTSTRING!" + e.toString();  //<--- dieser fehler spricht an
        }
    }

} catch (UnknownHostException e) {
    e.printStackTrace();
    failMessage = "IP-ADRESSE UNBEKANNT!";

} catch (IOException e) {
    e.printStackTrace();
    failMessage = "PC NICHT ERREICHBAR!";
}finally{
    if(socket != null){
        try {
            socket.close();                                      // <--- und hier wird der socket geschlossen                    

        } catch (IOException e) {
            e.printStackTrace();
            failMessage = "IO-Exception: " + e.toString();
        }
    }
}

}
return null;
habe den code im android handy teil (direkt oben drüber), der gaub ich den fehler verursacht, makiert.
durch den neu eingefügten code wird auf einmal der socket immer wieder geschlossen!
ich bin hobby programmierer und echt für jede hilfe dankbar.
 
Zuletzt bearbeitet:
Hallo DMD ....

habe den code im android handy teil (direkt oben drüber), der gaub ich den fehler verursacht, makiert.

Was bekommst du denn für einen Fehler im Errorlog angezeigt ?
Gibt deine Exeption was aus ?

P.S Du hast im Übrigen immer noch nicht das CRLF drin - da war doch mal was vor ein paar Tagen :)
 
Zuletzt bearbeitet:
java.net.SocketTimeoutException: failed to connect to / 10.17.5.115 (port 9090) after 1000ms.

die beiden tauschen vorher schon ihre namen aus und dann schicke ich einen json string vom handy zum server. funktioniert alles.
jetzt soll der pc (python server) zuerst die daten kontrollieren und mir dann ein ok oder nicht ok an das handy zurücksenden. funktioniert nicht wegen oben genannten fehler :(
Code:
//Servernamen empfangen
ByteArrayOutputStream bAPS_Message = new ByteArrayOutputStream(1024);
byte[] bytes_Message = new byte[1024];
int int_Message;
InputStream input_Message = socket.getInputStream();
while(true) {
    int_Message = input_Message.read(bytes_Message);
    bAPS_Message.write(bytes_Message, 0, int_Message);
    response = bAPS_Message.toString("UTF-8");
}
mit einem while(true) funktioniert es auch nicht.
weiß jemand ob das senden vom python server wenigstens schonmal richtig ist?
 
Zuletzt bearbeitet:
java.net.SocketTimeoutException: failed to connect to / 10.17.5.115 (port 9090) after 1000ms.

Du hast ein Verbindungsabbruch nach 1000ms (1s). Wahrscheinlich liegt der Fehler auf der Python Server. Benutzt du Timeouts?

Noch ein Tipp zum Javacode. finally sollte man eigentlich nicht unter Android benutzen (Performance). Und wenn, dann benutze es bitte nur für das Schließen der Streams. So wie du es benutzt, wird der Code extrem unübersichtlich und verschachtelt.

while(true) ist eine schlechte Idee. So ist eine Endlosschleife ohne Abbruchbedingung.
 
auf der python server seite nicht. nur aufm handy (andriod) gibt es dieses eine timeout.
von der server seite schicke ich einfach mit client.send("false") die info raus. auf dem handy kommt aber entweder oben genannter fehler oder
es komm socket is closed (das hatte ich auch schon).
 
Ich habe mich falsch ausgedrückt, der Verbindungsaufbau wird nach 1s abgebrochen, sprich es kommt keine Verbindung zustande.

Aber so ganz verstehe ich nicht, warum du das ganze nicht mit einen einfache HTTP - Verbindung machst?
 

Ähnliche Themen

S
Antworten
5
Aufrufe
914
swa00
swa00
Jansenwilson
Antworten
1
Aufrufe
768
swa00
swa00
M
Antworten
4
Aufrufe
1.183
swa00
swa00
Zurück
Oben Unten