Forum: FPGA, VHDL & Co. TCP packete senden.


von Jan S. (spongebob)


Lesenswert?

Moin. Ich versuche TCP packete zu senden aber bis jetzt leider 
vergeblich.
Ich habe sogar den IPerf client aus XAPP1026 implementiert. Das 
funktioniert aber partou nicht.
Der IPerf server funktioniert und der echoserver funktioniert auch 
einwandfrei.
Also ich nutze die RAW api und habe eigentlich nur den IPerf-client 
angepasst, so das ich unendwegt packete sende.

An meinem PC habe ich die IP-adresse 192.168.1.100 und auf meinem Board 
die adresse 192.168.1.10 eingestellt.

hier ein paar snippets meines Codes:
meine send_app:
1
int send_app()
2
{
3
  struct tcp_pcb *pcb;
4
  struct ip_addr ipaddr;
5
  err_t err;
6
  u16_t port;
7
8
  /* create new TCP PCB structure */
9
  pcb = tcp_new();
10
  if (!pcb) {
11
    xil_printf("Error creating PCB. Out of Memory\n\r");
12
    return -1;
13
  }
14
  IP4_ADDR(&ipaddr,  192, 168,   1, 100);    /* server address */
15
  port = 5001;
16
17
  err = tcp_connect(pcb, &ipaddr, port, connected_callback);  //another callback!!!
18
19
  if (err != ERR_OK) {
20
    xil_printf("txperf: tcp_connect returned error: %d\r\n", err);
21
    return err;
22
    }
23
24
  return 0;
25
}

das connected_callback:
1
static err_t
2
connected_callback(void *arg, struct tcp_pcb *tpcb, err_t err)
3
{
4
  xil_printf("Connected to server");
5
6
  /*store state*/
7
  connected_pcb = tpcb;
8
9
  /* set callback values & functions */
10
  tcp_arg(tpcb, NULL);
11
  tcp_sent(tpcb, sent_callback);
12
13
  /* initiate data transfer */
14
  return ERR_OK;
15
}

das sent_callback:
1
static err_t
2
sent_callback(void *arg, struct tcp_pcb *tpcb, u16_t len)
3
{
4
  return ERR_OK;
5
}

etwas aus meiner main:
1
...
2
send_app();
3
4
  /* receive and process packets */
5
  while (1) {
6
    xemacif_input(netif);
7
    transfer_data();
8
  }
9
...

und die funktion transfer_data:
1
int transfer_data() {
2
  if (tcp_sndbuf(connected_pcb) > sizeof("jan")) {
3
          tcp_write(connected_pcb, "jan", sizeof("jan"), 1);
4
      }
5
6
  tcp_output(connected_pcb);
7
8
  return 0;
9
}

dann starte ich das programm und gebe bei Iperf folgendes ein:
iperf.exe -s -i 5 -t 50

Kann vielleicht schon jemand an meinem Code einen Fehler sehen?

Woran könnte es denn noch liegen?
Ach ja, mit wireshark habe ich auch mal den Datenverkehr aufgezeichnet 
und ich sehe das das Board immer ARP anfragen sendet und der PC auch 
antwortet. nicht sofort, aber nach der 3. oder 4. anfrage:
darauf hin sendet das board dann auch zwei tcp Packete.

Ich weiß nicht was ich jetzt noch machen kann.

Grüße Jan

von Jan S. (spongebob)


Lesenswert?

Also, ich habe mein SDK projekt jetzt einem Kollegen gegeben, der das 
auf seinem Rechner mal eingebunden hat. Da hat alles einwandfrei 
funktioniert. Kann mir vielleicht jemand einen Tipp geben, wo ich jetzt 
bei mir am PC (win7) noch irgendwelche Einstellungen falsch gemacht 
haben könnte?

MfG
Jan

von Paket (Gast)


Lesenswert?

Es heißt übrigens “Paket“ und nicht “Packet“! So wie “Haken“ - auch der 
schreibt sich nicht “Hacken“.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.