Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Python - Invio pacchetti da smartphone a Server python
Forum - Python - Invio pacchetti da smartphone a Server python

Avatar
macco_cl (Normal User)
Rookie


Messaggi: 34
Iscritto: 27/02/2007

Segnala al moderatore
Postato alle 17:51
Venerdì, 05/08/2016
Ciao a tutti!

Come da titolo ho la necessità di inviare dei pacchetti contenenti dei dati del giroscopio interno del telefono ad un server in modo che li possa poi salvare sul database

L'invio dei pacchetti avviene tramite un'app, la quale prepara i dati da inviare e li invia al server tramite http in formato json, l'app è già pronta (ma non è stata sviluppata da me) il mio compito è quello di creare un server che possa essere sempre in ascolto sulla porta 80 e collezionare questi pacchetti.

Quello che avevo pensato ad un primo momento era di utilizzare i socket solo che mi sono accorto che essendo l'ip del cellulare dinamico non posso impostare un ip fisso a cui il server può rispondere e quindi mi sono bloccato.

Ho letto molta documentazione sui socket in python ma non riesco a capire in che modo posso utilizzarli, in questo caso specifico.

In che modo posso mettermi in ascolto di questi pacchetti e decodificarli con json?

Di seguito posto il codice che stavo sviluppando:

Codice sorgente - presumibilmente Python

  1. import socket
  2. import urllib2
  3.  
  4. if __name__ == "__main__":
  5.     """Main function that starts the server"""
  6.  
  7.     # Creates TCP socket in the specified IP address and port
  8.     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  9.     s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  10.     s.bind((socket.gethostname(), "80"))
  11.  
  12.     # Starts server, up to 10 clients are queued
  13.     s.listen("5")
  14.  
  15.  
  16.  
  17.  
  18.     while True:
  19.  
  20.         try:
  21.             print "start loop"
  22.             conn, addr = s.accept()
  23.             url = ?????   #qui non so che url mettere visto che il mio IP è dinamico
  24.             response = urllib2.urlopen(url)
  25.             lettura = response.read()
  26.             my_dict = json.loads(lettura)
  27.  
  28.  
  29.            
  30.         except:
  31.             print "errore"



Il codice che sto sviluppando è corretto? posso procedere in questa direzione o sto sbagliando?


Mi scuso anticipatamente se la mia domanda dovesse essere banale, ma sto cercando di imparare e vorrei farlo nel miglior modo possibile.

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1455
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 1:43
Lunedì, 08/08/2016
esistono molti framework web per il python. Non ce bisogno di reinventare la ruota scrivendo un altro server http.

P.S. perchè vuoi un filtro ip? Hai una app creata per un solo dispositivo?

Ultima modifica effettuata da TheDarkJuster il 08/08/2016 alle 1:44
PM Quote
Avatar
macco_cl (Normal User)
Rookie


Messaggi: 34
Iscritto: 27/02/2007

Segnala al moderatore
Postato alle 12:19
Martedì, 09/08/2016
Ciao, ti ringrazio per la risposta, sto attualmente leggendo un manuale di Django ma non capisco in che modo posso prendere le informazioni dall'url che mi arriverà e salvarle sul DB.

Scusa ma non ho capito la tua domanda, potresti spiegarmi cosa intendi con filtro ip?

L'applicazione manderà i dati solamente al server in formato Json, il server dovrà essere in ascolto e salvare le informazioni ricevute dall'app  in un DB.

Attualmente sto lavorando su questo codice:

Client python che invia una variabile in Json a quello che dovrebbe essere il server che sto sviluppando con Django:

Client.py

Codice sorgente - presumibilmente Python

  1. import json
  2. import urllib2
  3.  
  4. data = {
  5.         'ids': ["ciao", "miao", "bau"]
  6. }
  7.  
  8. req = urllib2.Request('http://127.0.0.1:8000/value/')
  9. req.add_header('Content-Type', 'application/json')
  10.  
  11. response = urllib2.urlopen(req, json.dumps(data))




Django view.py

Codice sorgente - presumibilmente Python

  1. from django.shortcuts import render
  2.  
  3. # Create your views here.
  4. from django.http import HttpResponse
  5. import json
  6. from models import *
  7.  
  8. from django.http import StreamingHttpResponse
  9. from django.views.decorators.csrf import csrf_exempt
  10.  
  11. @csrf_exempt
  12. def value(request):
  13.    
  14.     try:
  15.         data = json.loads(request.body)
  16.         label = data['label']
  17.         url = data ['url']
  18.         print label, url
  19.     #data = json_data['data']
  20.     except:
  21.         return HttpResponse("Malformed data!")
  22.     return HttpResponse("Got json data")



Solo che ho problemi in questo codice e non capisco il perché, mi ritorna sempre "Malformed data!"

Sbaglio qualcosa nel file python?

Il codice è sbagliato o come punto di partenza ci sono? :(

Ultima modifica effettuata da macco_cl il 09/08/2016 alle 18:08
PM Quote