2015-05-09 19 views
8

Stavo cercando di scrivere una semplice applicazione desktop e una corrispondente applicazione per cellulare, lo scenario sarebbe:Network Service Discovery su Windows Phone

  1. corro l'applicazione desktop sul mio portatile
  2. corro il cellulare applicazione sul mio Lumia (sulla stessa rete WiFi)
  3. l'applicazione telefono trova in qualche modo e si collega al un'applicazione desktop (non voglio dover trovare manualmente e digitare l'IP)
  4. I due possono ora comunicare

Un'app molto semplice come quella sarebbe l'invio di semplici messaggi di testo tra i due.
Immagino che un'applicazione di esempio potrebbe essere qualcosa come un "telecomando" per il tuo PC sul tuo telefono, uno può essere trovato sul mercato here.
Ho iniziato a guardare il multicast UDP e ho trascorso un giorno a cercare di farlo funzionare. L'idea sarebbe che entrambe le app si unissero allo stesso gruppo multicast, il telefono quando si unisce invia un messaggio a quel gruppo, il PC lo preleva e risponde con il suo IP, il telefono quindi effettua la connessione TCP all'app desktop. Sembra una soluzione valida, giusto? Beh, a prescindere da quello che ho provato, ciò accadrebbe:

  1. Scenario: app mobile in esecuzione sul telefono reale connesso allo stesso WiFi dell'app PC: i messaggi vengono inviati ma non arrivano mai.
  2. Scenario: app mobile in esecuzione su un emulatore sullo stesso PC dell'app PC: i messaggi vengono inviati e ricevuti.

Ecco un post con codice quando ho provato a utilizzare sockets-for-pcl per quello.
Ecco il mio tentativo di utilizzare ciò che è già in .NET:
PC - l'invio di un messaggio solo:

UdpClient udp = new UdpClient(port); 
IPAddress group_ip = IPAddress.Parse("139.100.100.100"); 
IPEndPoint client_ipep = new IPEndPoint(group_ip, 3344); 
byte[] b = System.Text.Encoding.UTF8.GetBytes(txtEntry.Text); 
udp.Send(b, b.Length, client_ipep); 

TELEFONO - ricevono solo:

HostName hostName = new HostName("139.100.100.100"); 
DatagramSocket udp = new DatagramSocket(); 
udp.MessageReceived += (sender, args) => 
{ 
    uint length = args.GetDataReader().ReadUInt32(); 
    string text = args.GetDataReader().ReadString(length); 
}; 
await udp.BindServiceNameAsync("3344"); 
udp.JoinMulticastGroup(hostName); 

Tuttavia, dopo una giornata ho rinunciato , dal momento che la documentazione è scarsa e il debugging richiederebbe di ottenere alcuni strumenti di scansione di rete ...

Durante la ricerca su Internet per alcune librerie per il rilevamento dei servizi di rete ho trovato alcuni Android docs ma niente per Windows Phone 8.1. Quindi credo che la mia domanda sarebbe: c'è qualcosa di simile per Windows Phone? O se noti qualcosa di sbagliato nel mio codice, cosa devo cambiare per farlo comunicare? Grazie.

risposta

1

Non dimenticare di impostare un numero di porta valido e ricevere dati multicast in modo asincrono

This sample potrebbe aiutare

+0

Io sono lontano da casa ora, ma lo controllerò più tardi oggi. Non ho visto prima questo articolo, spero che possa essere d'aiuto. Grazie :) –

+0

U R Benvenuto. Spero che sia d'aiuto – BzH