1

Cortex M3、Stellaris® LM3S6965 評価ボードを使用しています。UDP パケットを PC に送信しています。私はwiresharkでそれをチェックしたので、それはうまくいきます。しかし、私が見ているのは、ソースポートがないということです。そして、これを解決する方法がわかりません。

この関数を呼び出して、udp パケットを送信します

void send_udp(){
    RIT128x96x4Enable(1000000);
    RIT128x96x4StringDraw("UDP data verzonden..", 0, 40, 15);

    struct ip_addr  serverIp;
    IP4_ADDR(&serverIp,192,168,1,100);

    u16_t port;
    port = 64000;
    struct udp_pcb * pcb;
    pcb = udp_new();

    udp_bind(pcb, &serverIp, port);
    udp_recv(pcb, udp_echo_recv, NULL);
    struct pbuf *p;
    char msg[]="request";

    //Allocate packet buffer
    p = pbuf_alloc(PBUF_TRANSPORT,sizeof(msg),PBUF_RAM);
    memcpy (p->payload, msg, sizeof(msg));
    udp_sendto(pcb, p, &serverIp, port);
    pbuf_free(p); //De-allocate packet buffer
}

パケットの Wireshark の例: (ここをクリックして拡大) ここ

4

2 に答える 2

2

への呼び出しudp_bind()はローカル ポートを割り当てる必要がありますが、失敗しているようです。

使用している番号 (64000) は、動的ポート、プライベート ポート、またはエフェメラル ポートと呼ばれる範囲にあるため、期待どおりに機能しない可能性があります。

ドキュメントから、udp_bind()ポート番号 0 をサポートして、動的に割り当てられた番号を取得します。これは、送信元ポートが重要でない場合に通常使用される方法です。

于 2013-01-08T12:24:08.997 に答える
1

また、ipv4 pcb の「time to live」が 0 であることも確認しました。そのため、次の行を追加しました。

pcb->ttl = UDP_TTL; // Time to live

これは私の問題を解決しました

于 2013-01-10T10:39:22.570 に答える