# Android UDP Kommunikation



## Gabriel02 (5. Okt 2021)

Moin an alle,

ich hatte gestern schonmal hierzu ein Thema erstellt doch aus mysteriösen Gründen ist mein Account gelöscht worden und somit auch die gesamte Konversation dort.

Daher hier nochmal eine kleine Zusammenfassung:
Ich versuche über Android eine Kommunikation via UDP an mein Netzwerk zu realisieren, Wobei ich nur kurze Strings senden will. Ich habe schon eine funktionierende desktop version mit javaFX geschrieben somit weiß ich dass es an meinem Android Anwendung liegen muss. Ich habe den Code für die Kommunikation mit DatagramSocket quasi gleich behalten. Daher denke ich dass ich eine Android typische Konvention übersehe.

Als Test wollte ich erstmal den wert eines Sliders immer wenn er verändert wird über das Netzwerk zu senden.

Man hatte mir im letzten Thema vorgeschlagen ich solle nicht im UI Thread aufs Netzwerk zugreifen. Daher habe ich meine UDP_Client klasse so angepasst dass sie die Klasse Thread extended und run überschreibt. Ich habe meinen code demnach angepasst doch es funktioniert dennoch nichts. Ich hab bisher auch nicht wirklich oft mit Threads gearbeitet, daher könnte ich dabei ja einen Fehler gemacht haben.

Am liebsten würde ich mein gesamtes Projekt als zip anhängen doch der Server lässt das nicht zu.

[CODE lang="java" title="MainActivity" highlight="43"]mport androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Build;
import android.os.Bundle;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.SeekBar;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private SeekBar seekBar;
    private Switch  switch1;
    private TextView textView;
    final private UDPClient nachricht = new UDPClient("192.168.0.237" ,5555);

    //main
    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        seekBar = (SeekBar) findViewById(R.id.seekBar);
        switch1 = (Switch) findViewById(R.id.switch1);
        textView = (TextView) findViewById(R.id.textView);

        seekBar.setMin(0);
        seekBar.setMax(1023);
        textView.setText(String.valueOf(seekBar.getProgress()));

        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            int progressChangedValue = 0;

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                try {
                    progressChangedValue = progress;
                    textView.setText(String.valueOf(progress));
                    new Thread(new UDPClient("192.168.0.237" ,5555)).run();
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {}

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {}
        });

        switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean status) {
                try {
                    if(status){
                        textView.setText("An");
                        nachricht.sendData("Button1=1");
                    }else{
                        textView.setText("Aus");
                    }
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
        });
    }
}[/CODE]

[CODE lang="java" title="UDPClient" highlight="15-21"]import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPClient extends Thread{

    private String _zielIP;   // Adresse vom ESP-Empfänger
    private int _port;    // Port über welchen ESP und Clint Kommunizieren - muss gleich sein!

    UDPClient(String IP, int port){
        _zielIP = IP;
        _port = port;
    }
    @Override
    public void run() {
        try {
            this.sendData("Hallo von Android");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void sendData(String message) throws Exception {
        DatagramSocket localSocket = new DatagramSocket();


        InetAddress IP = InetAddress.getByName(_zielIP);
        localSocket.connect(IP, _port);
        DatagramPacket dataGramPacket = new DatagramPacket(message.getBytes(), message.length(), IP, _port);

        localSocket.send(dataGramPacket);
        localSocket.close();
    }
}[/CODE]

Vielen Dank schonmal im vorraus!
Gabriel


----------



## Gabriel02 (5. Okt 2021)

oh man das ist mir aber jetzt peinlich. Ich habe den Thread mit .run() versucht zu starten und nicht mit .start(). Jetzt funktioniert es. Danke noch mal an denjenigen der mir gestern diesen Tipp gab.


----------

