per il lato server (Android) si deve creare un programma che inserisca tra i permessi di AndroidManifest.xml la seguente riga
<uses-permission android:name="android.permission.INTERNET" />
sulla funzione OnCreate si puo' creare il server UDP come riportato nell'esempio seguente (porta di connessione 12345 e lunghezza massima del pacchetto 1024 bytes
------------------------------------------------------------
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String lText;
byte[] lMsg = new byte[1024];
DatagramPacket dp = new DatagramPacket(lMsg, lMsg.length);
DatagramSocket ds = null;
while (true)
{
try {
ds = new DatagramSocket(12345); //porta del server UDP 12345
//riceve il pacchetto
ds.receive(dp);
lText = new String(lMsg, 0, dp.getLength());
Log.i("Richiesta", lText);
//manda la risposta
byte[] b = "Risposta".getBytes();
DatagramPacket sendPacket = new DatagramPacket(b, b.length, dp.getAddress(), dp.getPort());
ds.send(sendPacket);
//manda la risposta
byte[] b = "Risposta".getBytes();
DatagramPacket sendPacket = new DatagramPacket(b, b.length, dp.getAddress(), dp.getPort());
ds.send(sendPacket);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ds != null) {
ds.close();
}
}
}
}
------------------------------------------------------------
creato il server si passa al lato client in Python da mettere sul PC Desktop
il programma manda un pacchetto al server ed il server lo mette nel file di log
--------------------------------------------------
from socket import socket, AF_INET, SOCK_DGRAM
data = 'Richiesta'
port = 12345
hostname = 'localhost'
udp = socket(AF_INET,SOCK_DGRAM)
#manda la richiesta
#manda la richiesta
udp.sendto(data, (hostname, port))
#aspetta e stampa la risposta
data, server = udp.recvfrom(1024)
print data
#aspetta e stampa la risposta
data, server = udp.recvfrom(1024)
print data
--------------------------------------------------
per poter effettuare le prove con l'emulatore di Android ci si collega via telnet alla shell dell'emulatore(telnet localhost 5554) e si digita
redir add udp:12345:12345
che reindirizza le chiamate alla porta localhost:12345 del Desktop alla porta 12345 dell'emulatore dove gira il server
Nessun commento:
Posta un commento