Josef wrote:
> hier mein Code
>
1 | > uip_send((void *)message.msg, message.characters);
|
2 | > while(uip_acked() == 0)
|
3 | > {
|
4 | > if(uip_timedout() != 0 || uip_aborted() != 0 || uip_closed() != 0)
|
5 | > break;
|
6 | > }
|
Wundert mich, dass das überhaupt funktioniert. Du darfst uip_send nur
aufrufen, wenn du innerhalb der Applikation bist, die vom uip Stack
aufgerufen wurde (weil zB ein Paket angekommen ist). Du darfst sie nicht
von extern aus benutzen.
uip.h:
1 | * This function is used to send out a single segment of TCP
|
2 | * data. Only applications that have been invoked by uIP for event
|
3 | * processing can send data.
|
Du solltest erstmal überlegen
1. Was willst du machen?
2. Wie willst du das machen?
Willst du eine TCP Verbindung zu einer Gegenstelle herstellen oder
einfach ein UDP Paket schicken?
Für TCP benötigst du erstmal eine offene Verbindung (uip_open). Dann
legst du eine uip-Applikation auf den Stack. Diese wird gestartet,
sobald die Gegenstelle die Verbindung angenommen hast.
Und jetzt darfst du bei jedem Aufruf der uip-Applikation überprüfen ob
neue Daten vorhanden sind. Falls ja: Sende sie. Falls nein: kannst du zB
closen oder die TCP Verbindung auf stop stellen.
Wenn du die Verbindung auf stop stellst, kommt aber kein neues Paket
mehr von der Gegenstelle (solange, bis du wieder eines schickst).
Trotzdem wird die Applikation aber (bei richtiger Integration)
regelmäßig aufgerufen (kannst du mit der Test-Funktion uip_poll()
bestimmen).
PS: uip_acked() usw sind Testfunktionen. Diese sollst du innerhalb
deiner Applikation anwenden und nicht außerhalb.