LWIP Stack: TCP + UDP

Gast #4666889
Lesenswert?
• ▲
▼
Ich habe beide defines für UDP und für TCP auf 1 gesetzt. In der 
Testapplikation wird zuerst die UDP Kommunikation installiert und im 
Anschluss die TCP Kommunikation.

Udp:
1
LWIP_Init();
2
upcb = udp_new();
3
if (upcb)
4
{
5
  udp_bind(upcb, IP_ADDR_ANY, UDP_SERVER_PORT);
6
  udp_recv(upcb, udp_server_receive_callback, NULL);
7
}

Tcp:
1
LWIP_Init();
2
tpcb = tcp_new();
3
if (tpcb != NULL)
4
{
5
  tcp_bind(tpcb, IP_ADDR_ANY, TCP_SERVER_PORT);
6
  tpcb = tcp_listen(tpcb);
7
  tcp_accept(tpcb, tcp_callback_accept);
8
}

Das Programm bleibt allerdings in der Initialisierungsroutine LWIP_Init 
stehen. In dieser Routine wird die Funktion lwip_init vom Stack 
aufgerufen.
(Firma: fritzler-avr.de) #4667652
Lesenswert?
• ▲
▼
Wie schon rausgefunden wurde, ist 2 mal LWIP_Init(); aufrufen keine gute 
Idee.
Ansonsten hat lwip nen brauchbares wiki wo erklärt wird wie man das in 
sein System einbindet.
Weiterhin empfielt es sich beim ersten nutzen die Debugausgaben 
einzuschalten und auf nen UART zu legen, diese sind sehr informativ.

Damit eine Serveranwendung auf mehreren Sockets lauschen kann wurde die 
select Anweisung gefunden.
Dieser ist es egal ob der eingehende Socket jetzt UDP oder TCP ist.
Dazu im Anhang etwas Code für Linux als Beispiel.
Lauscvht auf UDP/TCp, nimmt 2 Zahlene tngegen, rechnet was aus und 
schickt das Ergebnis zurück.
Für lwip muss das nur ein kleinw enig angepasst werden.

Infos zu select:
http://www.tutorialspoint.com/unix_system_calls/_newselect.htm
https://www.gnu.org/software/libc/manual/html_node/Server-Example.html
https://github.com/goertzenator/lwip/blob/master/contrib-1.4.0/apps/socket_examples/socket_examples.c
Angehängte Dateien:
Gast #4668448
Lesenswert?
• ▲
▼
Vielen Dank für deinen Beitrag. Leider kann ich SOCKET mit dem 
LWIP-Stack nicht nutzen, da ich kein RTOS verwende. Gibt es noch eine 
weitere Möglichkeit mit LWIP TCP und UDP zu benutzen?

1
void LWIP_Init(void)
2
{
3
  struct ip_addr ipaddr;
4
  struct ip_addr netmask;
5
  struct ip_addr gw;
6

7
  IP4_ADDR(&ipaddr, IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3);
8
  IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1 , NETMASK_ADDR2, NETMASK_ADDR3);
9
  IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3);
10

11
  lwip_init();
12

13
  /* - netif_add(struct netif *netif, struct ip_addr *ipaddr,
14
  struct ip_addr *netmask, struct ip_addr *gw,
15
  void *state, err_t (* init)(struct netif *netif),
16
  err_t (* input)(struct pbuf *p, struct netif *netif))
17

18
  Adds your network interface to the netif_list. Allocate a struct
19
  netif and pass a pointer to this structure as the first argument.
20
  Give pointers to cleared ip_addr structures when using DHCP,
21
  or fill them with sane numbers otherwise. The state pointer may be NULL.
22

23
  The init function pointer must point to a initialization function for
24
  your ethernet netif interface. The following code illustrates it's use.*/
25
  netif_add(&xnetif, &ipaddr, &netmask, &gw, NULL, &ethernetif_init, &ethernet_input);
26

27
  /*  Registers the default network interface.*/
28
  netif_set_default(&xnetif);
29

30
  /* Set Ethernet link flag */
31
  xnetif.flags |= NETIF_FLAG_LINK_UP;
32

33
  /* When the netif is fully configured this function must be called.*/
34
  netif_set_up(&xnetif);
35
}
Gast #4668512
Lesenswert?
• ▲
▼
UDP Server Initialisierung:
1
upcb = udp_new();
2
if (upcb)
3
{
4
  udp_bind(upcb, IP_ADDR_ANY, UDP_SERVER_PORT);
5
  udp_recv(upcb, udp_server_receive_callback, NULL);
6
}
7

8
TCP Server Initialisierung:
9
[c]
10
tpcb = tcp_new();
11
if (tpcb != NULL)
12
{
13
  tcp_bind(tpcb, IP_ADDR_ANY, TCP_SERVER_PORT);
14
  tpcb = tcp_listen(tpcb);
15
  tcp_accept(tpcb, tcp_callback_accept);
16
}

Wenn ich beide Initialisierungen ausführe, dann bleibt mein Programm bei 
ankommenden Packete hängen.
(Firma: fritzler-avr.de) #4669547
Lesenswert?
• ▲
▼
> Autor: Mw En (Firma: fritzler-avr.de) (fritzler)
> Datum: 02.08.2016 12:23

> Autor: entwickler (Gast)
> Datum: 02.08.2016 12:28

Hast das dicke pdf also in 5min gelesen, verstehe.
Ich verstehe, dass du keine Lust hast dich ausführlich mit dem Thema zu 
beschäftigen und Dokus zu lesen.
Ich bin raus aus dem Fred hier.
Gast #4669717
Lesenswert?
• ▲
▼
Das ist jetzt schon der dritte Thread dieser Art, wo es im Grunde 
genommen um das Gleiche Thema geht.

@entwickler:

Beispiele für deine konkreten fall wirst du kaum finden. Sei froh, dass 
es überhaupt einen freien IP Stack gibt.

Der Fachbereich, den du Dir da ausgesucht hast, ist schon recht komplex. 
Da kann man nicht einfach so ein paar Bausteine (nach Arduino Art) 
zusammen stecken und es läuft.

Du solltest schon bereit sein, dich einige Monate mit den Frameworks zu 
beschäftigen. Lies die gesamte Doku und den Quelltext und verstehe jede 
einzelne Zeile. Erst danach wirst du imstande sein, anständige 
Anwendungen zu entwicklen.

Ansonsten klass es besser ganz bleiben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren