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