2017-06-01 8 views
0

NUCLEO-F746ZGでUDPエコーサーサーを作成しようとしましたが、クライアントを起動すると、私のボードはただ1つの答えになります。Nucleo STM32F7上のUDPエコー

これは私のスレッドコードです:

static void udpecho_thread(void *arg) 
{ 
    err_t err, recv_err; 

    LWIP_UNUSED_ARG(arg); 

    conn = netconn_new(NETCONN_UDP); 
    if (conn != NULL) 
    { 
     err = netconn_bind(conn, '0xc0a8b26f', 8); 
     if (err == ERR_OK) 
     { 
      while (1) 
      { 
       recv_err = netconn_recv(conn, &buf); 

       if (recv_err == ERR_OK) 
       { 
        addr = netbuf_fromaddr(buf); 
        port = netbuf_fromport(buf); 
        netconn_connect(conn, addr, port); 
        buf->addr.addr = 0; 
        netconn_send(conn, buf); 
        netbuf_delete(buf); 
       } 
      } 
     } 
     else 
     { 
      netconn_delete(conn); 
     } 
    } 
} 

コンピュータで作業クライアント側:

Hostname 192.168.178.111 resolved as 192.168.178.111 

Reply from 192.168.178.111:8, time 46 ms OK 
Une connexion existante a dû être fermée par l'hôte distant 
Une connexion existante a dû être fermée par l'hôte distant 
Une connexion existante a dû être fermée par l'hôte distant 
Une connexion existante a dû être fermée par l'hôte distant 

Statistics: Received=1, Corupted=0, Lost=0 
+0

「外部ホストによって接続が切断されました」と解釈されるPCのエラーメッセージは表示されません。あなたはUDPを使用していることに注意してください - それは*コネクションレスです* - おそらくTCPとUDPを混ぜていますか? – tofro

+0

あなたのおかげで、私のプログラムにTCPとUDPが混在しました^^ " –

答えて

0

これが期待されています。

err = netconn_bind(conn, '0xc0a8b26f', 8); 

はスレッドの開始時にのみ呼び出され、その後は常にwhileループが動作します。たとえば、実行は1回だけです。あなたはこれに似たものに、この機能を書き換える検討するかもしれない

:あなたが見

static void udpecho_thread(void *arg) { 
    err_t err, recv_err; 

    LWIP_UNUSED_ARG(arg); 
    while (1) { /* Add this loop */ 
     conn = netconn_new(NETCONN_UDP); 
     if (conn != NULL) { 
      err = netconn_bind(conn, '0xc0a8b26f', 8); 
      if (err == ERR_OK) { 
       while (1) { 
        recv_err = netconn_recv(conn, &buf); 

        if (recv_err == ERR_OK) { 
         addr = netbuf_fromaddr(buf); 
         port = netbuf_fromport(buf); 
         netconn_connect(conn, addr, port); 
         buf->addr.addr = 0; 
         netconn_send(conn,buf); 
         netbuf_delete(buf); 
        } else { 
         break; /* Add break to stop inner loop */ 
        } 
       } 
      } 
      netconn_delete(conn); 
     } 
    } 
} 

、それは

+0

私はまだ同じエラーが出ています:192.168.178.111:8から返信、時刻32ms OK 遠い遠い 遠く離れていても結構です。 遠く離れていて、遠く離れています。 –

+0

私は本当にこのことが分かりませんでした。私は本当に知っていませんでしたか?結婚している人がいますか?接続は、英語の言語であることを意味します。 – tilz0R

+0

申し訳ありませんが、接続はカード(serveur)とコンピュータ(クライアントなぜ私は1パケットを受け取ることができるのか分からないのですか?私はTCPプロトコルで試してみて、それは動いています... –

0

フォーマットコードに非常に簡単ですEchoServeurのためのソリューションです:

static void udpecho_thread(void *arg) { 
    err_t err, recv_err; 

    LWIP_UNUSED_ARG(arg); 
    while (1) { /* Add this loop */ 
     conn = netconn_new(NETCONN_UDP); 
     if (conn!= NULL) { 
      err = netconn_bind(conn, '0xc0a8b26f', 8); 
      if (err == ERR_OK) { 
       while (1) { 
        recv_err = netconn_recv(conn, &buf); 

        if (recv_err == ERR_OK) { 
         addr = netbuf_fromaddr(buf); 
         port = netbuf_fromport(buf); 
         netconn_sendto(conn,buf,addr,port); 

         netbuf_delete(buf); 
        } 
       } 
      } else { 
       netconn_delete(conn); 
      } 
     } 
    } 
} 
関連する問題