4 votes

Comment puis-je activer le transfert UDP pour la communication USB entre un PC et une application Android ?

J'ai un réel Appareil Android connecté à un ordinateur via USB. J'ai réussi à activer TCP le transfert de port avec adb forward tcp:<port> tcp:<port> et communiquer avec succès avec des sockets mais je ne sais pas comment faire de même pour UDP .

EDIT : J'ai lancé mon application sur l'émulateur et j'ai tapé telnet localhost 5554 y redir add udp:<port>:<port> et il fonctionne, ma fonction executeCMD est fonctionnelle car lorsque j'essaie de ls ça marche.

Certains sites web disent qu'il faut utiliser redir comme ceci redir add udp:<port>:<port> mais lorsque je le fais, j'obtiens une erreur :

usage:
    redir --lport=<n> --cport=<n> [options]
    redir --inetd --cport=<n>

    Options are:-
        --lport=<n>     port to listen on
        --laddr=IP      address of interface to listen on
        --cport=<n>     port to connect to
        --caddr=<host>      remote host to connect to
        --inetd     run from inetd
        --debug     output debugging info
        --timeout=<n>   set timeout to n seconds
        --syslog    log messages to syslog
        --name=<str>    tag syslog messages with 'str'
        --connect=<str> CONNECT string passed to proxy server
        --bind_addr=IP  bind() outgoing IP to given addr
        --ftp=<type>        redirect ftp connections
            where type is either port, pasv, both
        --transproxy    run in linux's transparent proxy mode
        --bufsize=<octets>  size of the buffer
        --max_bandwidth=<bit-per-sec>   limit the bandwidth
        --random_wait=<millisec>    wait before each packet
        --wait_in_out=<flag>    1 wait for in, 2 out, 3 in&out

    Version 2.2.1.

Puis j'ai pensé que cette commande devait être lancée sur l'appareil Android et j'ai donc créé cette méthode :

 public String executeCMD(String cmd){
    StringBuffer output = new StringBuffer();
    try{
        Process process = Runtime.getRuntime().exec(cmd);
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        int read;
        char[] buffer = new char[4096];
        while ((read = reader.read(buffer)) > 0) output.append(buffer, 0, read);

        reader.close();
        process.waitFor();

    } catch(IOException e){ e.printStackTrace();
    } catch(InterruptedException e){ e.printStackTrace(); }

    return output.toString();
}

Et quand je l'ai appelé comme ça :

executeCMD("redir add udp:" + UDP_PORT + ":" + UDP_PORT)

Je n'obtiens aucune sortie et le UDP de l'application Android ne peut pas communiquer avec l'application UDP client.

Je suis donc un peu perdu... Je vais continuer à chercher mais si vous pouvez m'aider, allez-y.

Merci.

0voto

imjustmatthew Points 341

Donc finalement, je n'ai pas trouvé comment activer UDP pour la communication USB mais j'ai fait quelque chose d'autre qui fonctionne plutôt bien, mais vous devez activer le tethering USB ( Depuis l'ordinateur, envoyez un ping au téléphone pour voir s'il est correctement activé. ):

  1. Créez un serveur TCP sur le téléphone et un client TCP sur le bureau.

  2. Exécutez adb tcp:port tcp:port sur le bureau pour qu'il puisse communiquer avec le téléphone sur localhost via des sockets TCP.

  3. Faire en sorte que le serveur TCP envoie l'adresse IP (sur le réseau de connexion USB) de votre téléphone au client TCP.

  4. Ensuite, vous pouvez fermer la connexion TCP et avec l'adresse, vous pouvez initier une connexion UDP avec socket comme vous le feriez dans une situation normale.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X