Sind in dem Zusammenhang mit UDP_DIRECT_SEND eigentlich Probleme mit broadcast bekannt bzw. hat das schon mal jemand genutzt?

Ich steuere mit ethersex eine Kombination aus seriellem Drucker und RFID-Reader an und wollte, sobald per dhcp eine IP-Adresse zugewiesen ist, einen broadcast z.B. mit der eigenen IP als Inhalt versenden mit UDP_DIRECT_SEND an x.y.z.255 , damit die Anwendung (läuft dauerhaft auf einem Server), die das device steuern soll, ethersex findet.

Das funktioniert auch prinzipiell, allerdings hört ethersex überhaupt nicht mehr auf mit dem Senden und ich verstehe nicht so ganz warum. (man sieht an der Netzwerkbuchse, dass beide LED nach broadcast dauerhaft eingeschaltet sind)

Im control6 sollte nach folgender Mimik sichergestellt sein, dass auch nur einmal pro Minute der broadcast versendet wird. (die Anwendung die darauf hört schaltet den broadcast dann mit entsprechendem ecmd c6 set von populate_on wieder ab, sobald sie einmal die IP adresse von ethersex per broadcast erhalten hat)

...
THREAD(populate)
if ((populate_do==1) && (populate_on==1))
{
populate_do=0;
uip_gethostaddr(&hostaddr);
clientadr0=hostaddr[0] & 0xFF;
clientadr1=hostaddr[0] >> 8;
clientadr2=hostaddr[1] & 0xFF;
clientadr3=hostaddr[1] >> 8;
UDP_DIRECT_SEND( clientadr0.clientadr1.clientadr2.255 , 2701, 2701, "Hello world... \n")
}
THREAD_END(populate)
...
ON ONCE CLOCK_SEC == 0 DO populate_do=1; END

In den ersten 2-3 Minuten ist noch eine Sendepause zu erkennen, aber dann wird irgendwann durchgehend gesendet. Ausserdem dauert das Senden eines Broadcasts irgendwie viel zu lange.

Irgendeine Idee, was da der Denkfehler ist? Funktioniert broadcast auf ethersex anders? Prinzipiell könnte in clientadr0..3 am Anfang noch Müll drinstehen, solange bis per dhcp eine IP da ist. Aber da ja letztlich schon Daten versendet werden, scheint mir das kein Problem zu sein. (mit nc -ulp 2701 kann ich die Meldung von ethersex auch empfangen)

Besten Gruß.
Tjareson


On 27.03.2015 01:42, e...@users.sourceforge.net wrote:
Hallo,

sprintf war der Hinweis, der mir fehlte, Danke.

Mit UDP_DIRECT_SEND(192.168.0.1.5, 2701, 2701, "%s", buf1) funktioniert es.
den Umweg über buf1 braucht es nicht, wenn du UDP_DIRECT_SEND direkt
den String formatieren lässt.

Noch kurz zur IP-Adresse
In control6.c wird ja die IP Adresse irgendwie mit uip_ipaddr(&ip,
192, 168, 1, 5); zusammengebaut.
Um das auch dynamisch zu machen habe ich mir jetzt im control6
script folgendes Konstrukt gebaut:

int srvadr1=192;
int srvadr2=168;
int srvadr3=1;
int srvadr4=5;
...
UDP_DIRECT_SEND(srvadr1.srvadr2.srvadr3.srvadr4, 2701, 2701, "%s", buf1)
Man kann in control6-Skripten auch direkt C-Anweisungen schreiben.
In Deinem Fall halte ich es für sinnvoll, statt UDP_DIRECT_SEND
den C-Code, der dahinter steckt, direkt hinzuschreiben. Erspart
ganz nebenbei auch die Verrenkung mit der IP-Adresse und dem String.
Siehe control6/lang.d/45_udp.m4




_______________________________________________
Ethersex-devel mailing list
Ethersex-devel@list.zerties.org
http://list.zerties.org/cgi-bin/mailman/listinfo/ethersex-devel

Antwort per Email an