IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Android Discussion :

Communication UDP Java server et C client


Sujet :

API standards et tierces Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 156
    Par défaut Communication UDP Java server et C client
    Bonjour,

    J'ai fait deux codes un serveur coté Android Java et l'autre client en C, j'aimerai réaliser une communication entre les deux mais je ne sais pas comment faire, je cherche sur le net mais je ne trouve pas vraiment ce qui m'intéresse.

    Voilà mon code en Java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    package com.example.server_android;
     
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Gravity;
    import android.view.Menu;
    import android.widget.TextView;
    import android.widget.Toast;
     
     
    public class Server_Android extends Activity{
     
    	private final static int SERVER_PORT = 1234;
        //private final static int CLIENT_PORT = 10001;
        private  final static String SERVERIP = "127.0.0.1"; 
     
        InetAddress clientAddr = null;
        DatagramSocket socket = null;
        DatagramPacket packetOut = null;
        DatagramPacket packetIn = null;
        byte[] DataIn;
        byte[] DataOut;
        TextView text;
        Toast toast;
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
     
    		setContentView(R.layout.activity_server_android);
    		//text = (EditText)findViewById(R.id.editText1);
    		text =(TextView)findViewById(R.id.textView2);
    		text.setText("");
    		DataIn = new byte[1024];
    		DataOut = new byte[1024];
     
    		/* Thread for receiving Data from CLient */
    		new Thread(new Receiver()).start();
    		try {
    			Thread.sleep(500);
    		}catch(InterruptedException e){
    			Log.e("UDP", "UDP receive failed!");
    		}
    	}
     
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		// Inflate the menu; this adds items to the action bar if it is present.
    		getMenuInflater().inflate(R.menu.server__android, menu);
    		return true;
    	}
     
     
    	public class Receiver implements Runnable{
     
    		public void run(){
     
    			try {
    			while(true){
     
    					socket = new DatagramSocket(SERVER_PORT);
     
    			text.setText(SERVERIP + "\n");
    			InetAddress clientAdress = InetAddress.getByName(SERVERIP);		
    			text.append("Adresse Client:" + clientAdress + "\n");
    			packetIn = new DatagramPacket(DataOut,DataOut.length);
    			Log.d("UDP", "preparing packet");
    			Log.d("DatagramPacket", "" + packetIn);	
    			text.append("Packet :" + packetIn + "\n");
    			socket.receive(packetIn);
    			Log.d("UDP", "Packet receveid");	
    			String message = new String(packetIn.getData());
    			Log.d("UDP", "le message reçu");
    			Log.d("Message : ", "***" + message);
    			text.append("Message : " + message + "\n");
    			}
    			}catch(Exception e){
    				Log.e("UDP", "Receiver error", e);
    //				toast.makeText(this, "Receviere Error", toast.LENGTH_LONG);
    //	            toast.setGravity(Gravity.CENTER, 0, 0);
    //	            toast.show();
    			}
    			}
    		}
     
     
     
    }
    et le code en C:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    //----------------------------------------------------------------------------
    #include "biblio.h"
     
    int
    main(int argc,
         char **argv)
    {
    //_________Seting_Destination_IP_adress____________________
     
    in_addr_t ipAddress= inet_addr("127.0.0.1");
     
    //_________Seting_Destination_port____________________
    int portNumber = 1234;
    //---- create UDP socket ----
    int udpSocket=socket(PF_INET,SOCK_DGRAM,0);
    if(udpSocket==-1)
      { perror("socket"); exit(1); }
     
    struct sockaddr_in toAddr,serverAddr;
    int lenght = sizeof(toAddr);
    int size = sizeof(serverAddr);
     
    // ... allowing broadcast (optional)
    int on=1;
        if(setsockopt(udpSocket,SOL_SOCKET,SO_BROADCAST,&on,sizeof(int))==-1)
        { perror("setsockopt"); exit(1); }
     
    int s;
    for(;;)
      {
      //---- read next line on standard input ----   
      char msg[0x100];
      char *buffer = malloc(100);	
      if(!fgets(msg,0x100,stdin)) { break; } 
      //---- send message to the specified destination/port ----
      bzero(&toAddr,lenght);	
      toAddr.sin_family=AF_INET;
      toAddr.sin_port=htons(portNumber);
      toAddr.sin_addr.s_addr=ipAddress;
      s = sendto(udpSocket,msg,strlen(msg),0,(struct sockaddr *)&toAddr,lenght);
      if( s == -1)  
      { perror("sendto"); exit(1); } 
    }
     
    //---- close UDP socket ----
    close(udpSocket);
    return 0;
    }
    De l'aide svp.
    Merci

  2. #2
    Membre expérimenté Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Par défaut
    Bonjour,

    Dans ton client en C tu lui passes l'adresse 127.0.0.1, mais ton serveur et ton client tournent sur le même appareil (ca à pas l'air vu que tu charges des librairies Android et que ton prog en C doit sûrement tourner sur PC) ?

    Si non, récupère l'ip de ton serveur, et à la ligne 11 de ton client :

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    in_addr_t ipAddress= inet_addr("127.0.0.1");

    Remplace 127.0.0.1 par l'IP de ton serveur.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 156
    Par défaut
    Oui pour l'instant les deux tournent sur le meme appareil, et pour l'adresse IP du serveur j'ai remplacé 127.0.0.1 par 10.4.0.10 qui est l'adresse de la machine connecté au réseau via l'interface em1 sous Fedora mais ça ne marche toutjours pas!!

    J'ai essayé de me connecter au serveur via netcat à l'aide la commande :
    nc -u 10.4.0.10 1234 mais je ne reçoie rien, il ne se passe rien au niveau du receive de mon programme Java !

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    @nabil.brarou : Si le serveur ne marche pas, ce n'est pas la peine de tester le programme client en C. Je déplace la discussion dans le forum Java pour que des connaisseurs de ce langage puissent t'aider.

    @Javaïens : à vous de jouer ! Renvoyez le sujet quand ce sera le tour du C ^^

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 156
    Par défaut
    Oui merci, c'est vraiment au niveau de mon programme Java Android que ça bloque, parce que j'ai essayé de créer un serveur C pour communiquer avec mon client et ça marchait bien, maintenant le but et de le faire communiquer avec le serveur Android.
    Quelle sont les changements que je dois effectuer pour que ça marche ? svp

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    ben aucun... sauf que 127.0.0.1 cela ne peut pas fonctionner.... quelque soit le cas...

    Tu as essayé de faire un serveur C et il fonctionne avec 127.0.0.1 ? Mais dans ce cas c'est obligatoirement sur la même machine virtuelle... hors ce n'est pas possible sous android.

    De toute manière le sujet n'a pas grand chose à voir avec Android.... Si on spécifie une @ IP à un socket UDP, on dit spécifique sur quelle interface on écoute, et 127.0.0.1 veut dire: "je ne veux écouter que les paquets UDP qui arrivent sur la boucle locale" (donc depuis la machine locale).
    C'est INADDR_ANY (0) qu'il faut utiliser pour le "bind" pour dire: "sur n'importe quellle interface".

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/04/2012, 10h16
  2. Connexion Java(server) et Python(client)
    Par xeerox23 dans le forum CORBA
    Réponses: 1
    Dernier message: 01/12/2009, 17h22
  3. [Débutant][Sockets] Server en C++, client en Java
    Par mavina dans le forum Réseau
    Réponses: 16
    Dernier message: 05/10/2009, 03h45
  4. [WebService]Server Delphi et client Java
    Par davels dans le forum Web & réseau
    Réponses: 12
    Dernier message: 05/06/2008, 11h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo