L3xXuS
Lt. Junior Grade
- Registriert
- März 2009
- Beiträge
- 472
Guten Abend!
Ich habe ein Problem, bei dem ich schon seit einigen Tagen nicht so recht weiterkomme.
Ich habe in C# eine Konsolenanwendung, die lediglich dauerhaft per UDP Client Daten im lokalen Netzwerk an eine einzelne IP versendet. Diese IP ist ein Android Geraet, das die Daten dauerhaft empfangen und anzeigen soll.
Grundsaetzlich funktioniert mein System auch, allerding hab ich das Problem, das ca alle 55 Sekunden ein Lag auftritt, der die Datenaktualisierung auf dem Androidgeraet vollstaendig lahmlegt. Es laggt und dauert dann ein paar Sekunden, bis sich das ganze beruhigt und nach wieder ca 55 Sekunden wiederholt.
Die C# Anwendungen besteht nur aus einer while Schleife in der eben die Daten berechnet und versendet werden. Bei der Anzeige in der Konsole konnte ich hier auch noch keine Programmverzoegerungen feststellen.
In Android hab ich einen Hintergrundthread mit Datagramsocket, der ebenfalls dauerhaft die Daten empfangen soll.
Dort verarbeite ich die Daten durch einen Bytebuffer, weil das byte array zwar eine fest Struktur hat, aber nicht geordnet ist. Im Handler wird dann die UI entsprechend angepasst.
Ich habe bereits ausprobiert:
- Thread Sleeps in C# ( verringern die Intensitaet des Lags, verhindern ihn aber nicht)
- Thread Sleep in Android (Keine wirkliche Veraenderung)
- Anderes Netzwerksetup (Fritzbox statt IPFire als DHCP Server -> Keine Veaenderung)
- Den Empfang im Android als AsyncTast (Keine Veraenderung)
- Geringere Datenmenge (keine Veraenderung)
Ich verzweifel langsam und deswegen ueberseh ich einen einfachen Fehler eventuell.
Falls mir also jemand Tips geben koennt waere ich sehr erfreut.
Gruss
So dann noch die C# Komponente:
Ich habe ein Problem, bei dem ich schon seit einigen Tagen nicht so recht weiterkomme.
Ich habe in C# eine Konsolenanwendung, die lediglich dauerhaft per UDP Client Daten im lokalen Netzwerk an eine einzelne IP versendet. Diese IP ist ein Android Geraet, das die Daten dauerhaft empfangen und anzeigen soll.
Grundsaetzlich funktioniert mein System auch, allerding hab ich das Problem, das ca alle 55 Sekunden ein Lag auftritt, der die Datenaktualisierung auf dem Androidgeraet vollstaendig lahmlegt. Es laggt und dauert dann ein paar Sekunden, bis sich das ganze beruhigt und nach wieder ca 55 Sekunden wiederholt.
Die C# Anwendungen besteht nur aus einer while Schleife in der eben die Daten berechnet und versendet werden. Bei der Anzeige in der Konsole konnte ich hier auch noch keine Programmverzoegerungen feststellen.
In Android hab ich einen Hintergrundthread mit Datagramsocket, der ebenfalls dauerhaft die Daten empfangen soll.
Dort verarbeite ich die Daten durch einen Bytebuffer, weil das byte array zwar eine fest Struktur hat, aber nicht geordnet ist. Im Handler wird dann die UI entsprechend angepasst.
Ich habe bereits ausprobiert:
- Thread Sleeps in C# ( verringern die Intensitaet des Lags, verhindern ihn aber nicht)
- Thread Sleep in Android (Keine wirkliche Veraenderung)
- Anderes Netzwerksetup (Fritzbox statt IPFire als DHCP Server -> Keine Veaenderung)
- Den Empfang im Android als AsyncTast (Keine Veraenderung)
- Geringere Datenmenge (keine Veraenderung)
Ich verzweifel langsam und deswegen ueberseh ich einen einfachen Fehler eventuell.
Falls mir also jemand Tips geben koennt waere ich sehr erfreut.
Gruss
Code:
Object[] data = new Object[64];
@Override
public void run() {
Looper.prepare();
// Looper.loop();
try {
socket = new DatagramSocket(2302);
} catch (SocketException e1) {
// TODO Auto-generated catch block
System.err.println("Socket Error!");
}
bb = ByteBuffer.wrap(input_buffer);
packet = new DatagramPacket(input_buffer, input_buffer.length);
while (true) {
try {
socket.receive(packet);
} catch (IOException e) {
System.err.println("Paket Error!");
}
// Counter
int i = 0;
// while loop to insert data to the ouput array
while (bb.hasRemaining()) {
if (i == 9 || i == 10 || i == 16 || i == 14 || i == 15) {
data[i] = bb.getInt();
} else {
data[i] = bb.getFloat();
}
i++;
}
bb.clear();
// receiveTelemtry();
mHandler.post(updateUI);
}
}
};
So dann noch die C# Komponente:
Code:
private static void sendTestData()
{
using (UdpClient udp = new UdpClient())
{
Int32 x = 0;
while (true)
{
Console.Clear();
if (x > 7000)
{
x = 0;
}
byte[] sendData = new byte[4];
sendData = Encoding.ASCII.GetBytes(x.ToString());
udp.Send(sendData, sendData.Length, ip4);
Console.WriteLine(x);
x++;
//Thread.Sleep(100); optional
}
}
}