www.mikrocontroller.net

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


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Jan S. (spongebob)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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:
int send_app()
{
  struct tcp_pcb *pcb;
  struct ip_addr ipaddr;
  err_t err;
  u16_t port;

  /* create new TCP PCB structure */
  pcb = tcp_new();
  if (!pcb) {
    xil_printf("Error creating PCB. Out of Memory\n\r");
    return -1;
  }
  IP4_ADDR(&ipaddr,  192, 168,   1, 100);    /* server address */
  port = 5001;

  err = tcp_connect(pcb, &ipaddr, port, connected_callback);  //another callback!!!

  if (err != ERR_OK) {
    xil_printf("txperf: tcp_connect returned error: %d\r\n", err);
    return err;
    }

  return 0;
}

das connected_callback:
static err_t
connected_callback(void *arg, struct tcp_pcb *tpcb, err_t err)
{
  xil_printf("Connected to server");

  /*store state*/
  connected_pcb = tpcb;

  /* set callback values & functions */
  tcp_arg(tpcb, NULL);
  tcp_sent(tpcb, sent_callback);

  /* initiate data transfer */
  return ERR_OK;
}

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

etwas aus meiner main:
...
send_app();

  /* receive and process packets */
  while (1) {
    xemacif_input(netif);
    transfer_data();
  }
...

und die funktion transfer_data:
int transfer_data() {
  if (tcp_sndbuf(connected_pcb) > sizeof("jan")) {
          tcp_write(connected_pcb, "jan", sizeof("jan"), 1);
      }

  tcp_output(connected_pcb);

  return 0;
}

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

Autor: Jan S. (spongebob)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Paket (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net