l'envoi et la réception des paquets UDP sur le socket datagramme dans android
J'ai deux classes,l'une de l'expéditeur de la classe et de l'autre, la classe de récepteur.À la fois de l'envoi et la réception d'applications s'arrête après quelques secondes et fermer.
Mon expéditeur de la classe est :
public class MainActivity extends Activity {
InetAddress receiverAddress;
DatagramSocket datagramSocket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
datagramSocket = new DatagramSocket(4444);
} catch (SocketException e1) {
//TODO Auto-generated catch block
e1.printStackTrace();
}
byte[] buffer = "0123456789".getBytes();
byte[] address="192.168.1.101".getBytes();
try {
receiverAddress = InetAddress.getByAddress(address);
} catch (UnknownHostException e1) {
//TODO Auto-generated catch block
e1.printStackTrace();
}
DatagramPacket packet = new DatagramPacket(
buffer, buffer.length, receiverAddress, 4444);
try {
datagramSocket.send(packet);
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
Mon de la réception ou de l'écoute de la classe est:
public class MainActivity extends Activity {
DatagramSocket datagramSocket;
DatagramPacket packet;
TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1=(TextView)findViewById(R.id.textView1);
try {
datagramSocket = new DatagramSocket(80);
} catch (SocketException e1) {
//TODO Auto-generated catch block
e1.printStackTrace();
}
byte[] buffer = new byte[10];
packet = new DatagramPacket(buffer, buffer.length);
try {
datagramSocket.receive(packet);
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
byte[] buff = packet.getData();
tv1.setText(buff.toString());
}
Merci d'avance pour l'aide.
- Je pense que vous devez exécuter ces datagramme transactions sur un thread séparé, ou un nouveau thread, même si je ne suis pas sûr si cela suffira à résoudre vos problèmes
- Qu'est-ce que dans votre logcat ?
Vous devez vous connecter pour publier un commentaire.
Dans Android, vous n'êtes pas autorisé à exécuter les opérations de Réseau sur l'UIThread (Main-Thread)
Pour Résoudre ce problème:
Copie de votre réseau-code dans un nouveau sujet et de le laisser tourner.
Les numéros de port dans le "new DatagramSocket(...)" les appels de l'air bizarre. Le client doit créer un "indépendant" socket - il suffit d'utiliser "new DatagramSocket();". L'expéditeur doit lier au port que le client envoie, par exemple, "new DatagramSocket(4444);".
Source et le numéro de port de destination doit être la même. Donner le même nombre dans "DatagramSocket(xxx)". xxx doit être la même dans les deux programmes.