Parvenir à un périphérique réseau par IP et le port à l'aide de l'émulateur Android
Pourquoi mon application java pour android pas se connecter au serveur ?
- Je exécuter l'application dans l'émulateur android, et le serveur qui le port 9999 et host 127.0.0.1 dans mon pc, mais juste de ne pas connecter et je pense que cette méthode n'est pas bonne pour l'application android.
Mise à jour: je travail avec l'API 8 ... Android 2.2 !
C'est du Bon travail ! ! Merci à tous 😉
C'est mon code source:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
//Java imports
//import android.util.Log;
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class MainActivity extends Activity{
//Variaveis Interface
private Button ligar;
private Button enviar;
private EditText text1;
private TextView text2;
//Variaveis
static Socket cSocket;
static PrintWriter out;
static BufferedReader in;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Declaração butões
ligar = (Button) findViewById(R.id.ligar);
enviar = (Button) findViewById(R.id.enviar);
text1 = (EditText) findViewById(R.id.text1);
text2 = (TextView) findViewById(R.id.text2);
//Interacao
ligar.setOnClickListener(new OnClickListener(){
public void onClick(View arg0){
connect();
}
});
enviar.setOnClickListener(new OnClickListener(){
public void onClick(View arg0){
out.println("Hello");
text2.setText("");
}
});
}
//Outras Funcoes
public void connect(){
//Funcao ligar
cSocket = null;
out = null;
in = null;
try{
cSocket = new Socket("10.0.2.2",4444);
out = new PrintWriter(cSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(cSocket.getInputStream()));
text2.setText("Estas conectado com sucesso.");
}
catch (IOException ex) {
//Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);
text2.setText("Erro! Na conexão");
}
}
//
}
Ne pas oublier de marquer la réponse acceptée, ou d'afficher votre propre solution (dans le cas où les réponses ci-dessous ne résolvent pas votre problème) et de l'accepter. Chaque fois que vous résoudre votre problème, vous devriez "finaliser" la question du marquage de l'une réponse comme "accepté".
OriginalL'auteur FredVaz | 2011-11-19
Vous devez vous connecter pour publier un commentaire.
Voir ici:
Ordinateur hôte peut être atteint à l'aide de l'adresse IP de
10.0.2.2
à partir de l'émulateur.**edit, en réponse à votre commentaire:*
Pour l'exhaustivité et à mieux comprendre ma réponse, lisez la Émulateur Android documentation.
Ce sont les Adresses IP a atteint à partir de l'émulateur:
10.0.2.1
, Routeur/adresse de la passerelle.10.0.2.2
, Spécial alias à votre hôte de l'interface de bouclage (c'est à dire, 127.0.0.1 sur votre machine de développement)10.0.2.3
, Premier serveur DNS10.0.2.4
/10.0.2.5
/10.0.2.6
, En option, deuxième, troisième et quatrième serveur DNS (le cas échéant)10.0.2.15
, Le émulé périphérique réseau/ethernet interface127.0.0.1
, Le émulé périphérique de l'interface de bouclageCela dit, nous avons:
127.0.0.1
à partir de l'émulateur en essayant d'atteindre votre machine hôte. Utilisation10.0.2.2
, comme je l'ai dit.HostComputerIP:appServicePort
. Il ne fonctionne pas depuis votre ordinateur hôte lui-même (Windows, Linux, système d'exploitation, etc.) n'est pas l'exécution d'un service dans le port. Vous avez besoin de rediriger un port sur l'émulateur console à un port sur une émulé Android instance lui-même (voir 2 ci-dessous).Commun besoins de mise en réseau:
1 de l'Émulateur d'application en tant que client et l'ordinateur local en tant que serveur
Parce que l'émulateur est en NAT, je crois que vous pouvez vous connecter à n'importe quel ordinateur sur votre réseau local directement. Je veux dire, depuis le virtuel routeur a accès aux deux réseaux, il doit être capable de gérer sortant (c'est à dire, l'émulateur->real lan) connexions de la même amende.
Exemple: sur mon réseau (192.168.0.x), je peux me connecter de l'émulateur pour mon réel routeur (
192.168.0.254
) il suffit de pointer l'émulateur navigateur web pourhttp://192.168.0.254:port
. J'utilise différents services (grêle à la Tomate!), et je peux accéder à tous les, à chaqueport
. Pas besoin de gérer la redirection de port, comme prévu.Par les regards de votre code, je crois que vous avez besoin de:
2 - ordinateur Local en tant que client et l'émulateur d'application en tant que serveur
Maintenant c'est une autre histoire. Vous devez configurer les redirections de port sur le virtuel routeur. La façon la plus simple est:
Telnet dans la "gestion" du système (ce n'est pas l'émulateur), à partir de votre hôte (votre ordinateur, une console de linux ou de l'invite de commande sous Windows):
Après cela, utilisez:
Après cela, vous serez en mesure d'avoir un service sur
emulatorPort
et vous serez en mesure de vous connecter à partir d'ordinateurs du réseau local en accédant àhostComputerIP:localPort
.C'est la façon dont les gens (moi y compris) d'utiliser, par exemple, SSHDroid à l'intérieur d'un émulateur.
Autre chose?
Pas de travail... et déjà un test avec un wirelless lien, le emulador dans un diferent pc Serveur !
Vous devriez avoir dit que c'est dans un autre ordinateur que le serveur. Vous avez dit "host 127.0.0.1 mon pc", nous avons donc deviné que c'était la même. De toute façon, j'ai mis à jour la réponse avec deux solutions pour votre problème, en fonction de ce que exactement vous voulez faire.
Non, c'est la même chose.. mais j'ai déjà tester dans différents pc que émulateur.. désolé mon mauvais anglais.
Pas de problème pour l'anglais. Donc... réponse OUI/NON à moi: 1) votre code est dans l'émulateur, 2) de votre serveur dans le réseau local, 3) votre serveur est PAS dans la même machine que votre émulateur. --- Est-ce que le droit?
OriginalL'auteur davidcesarino
127.0.0.1 va à localhost. Alors que c'est votre propre ordinateur à partir de votre PC, c'est le téléphone du téléphone. Vous devez fournir l'adresse IP réelle. En outre, si vous n'avez pas encore installé, assurez-vous de demander le Internet autorisation. Voir la doc sur les autorisations et cette autre SORTE de post.
Mise à jour:
Pour répondre à votre commentaire, que David points de l'émulateur, vous pouvez utiliser
10.0.2.2
pour atteindre votre machine hôte.l'émulateur android est une machine virtuelle, de sorte que le 127.0.0.1 désigne le localhost de l'émulateur android S. O lui-même.
ok.. je comprends ! Alors, comment puis-je tester? Ou de quelle adresse Ip de l'hôte que je peux utiliser dans android de se connecter au serveur ?
OriginalL'auteur kabuko