2016-08-21 8 views
0

私はESP8266用の簡単なSNTPクライアントをlwip netconn API(esp-open-rtosを使用)で作成しようとしています。問題は私がサーバーから回答を受け取ることができないことです。lwip netconn api - SNTPサーバからの回答を受け取ることができません

コード(エラーチェックおよびデバッグmessgaesなし):

#include <string.h> 

#include <lwip/api.h> 
#include <lwip/err.h> 

struct sntp_message 
{ 
    u8_t li : 2; 
    u8_t vn : 3; 
    u8_t mode : 3; 
    u8_t stratum; 
    u8_t poll; 
    u8_t precision; 
    u32_t root_delay; 
    u32_t root_dispersion; 
    u32_t reference_identifier; 
    u32_t reference_timestamp[2]; 
    u32_t originate_timestamp[2]; 
    u32_t receive_timestamp[2]; 
    u32_t transmit_timestamp[2]; 
} __attribute__((packed)); 

#define SNTP_MSG_LEN (sizeof(struct sntp_message)) 

int16_t sntp_sync(char* server) 
{ 
    err_t err; 
    int16_t result = ERR_OK; 
    ip_addr_t sntp_server_address; 
    struct netconn* connection = NULL; 
    struct netbuf* send_buffer = NULL; 
    struct netbuf* receive_buffer = NULL; 
    struct sntp_message* send_buffer_data = NULL; 

    err = netconn_gethostbyname(server, &sntp_server_address); 
    connection = netconn_new(NETCONN_UDP); 
    err = netconn_connect(connection, &sntp_server_address, 123); 
    send_buffer = netbuf_new(); 
    send_buffer_data = netbuf_alloc(send_buffer, SNTP_MSG_LEN); 
    memset(send_buffer_data, 0, SNTP_MSG_LEN); 
    send_buffer_data->vn = 4; 
    send_buffer_data->mode = 3; // Mode client. 
    err = netconn_send(connection, send_buffer); 
    err = netconn_recv(connection, &receive_buffer); // Here netconn_recv block my thread, and no data received. If i set timeout, i have timeout error. 
    return result; 
} 

私のコードで間違っている可能性がありますか? netconn_bindを使用してデータを受信する前に接続をバインドする必要がありますか?それとも忘れたの?

答えて

0

自転車を発明しないでください。 Simon Goldschmidtは既にLwIPのSNTPを書いています。 Link。あなたはlwip-contribの説明とgit repoを見つけることができます。 githubやどこでもミラーを探すことができます(アップグレードすることもできます)。

+0

私はこの実装を試みましたが、同じ方法で失敗しました - lwip_recvfromは-1を返しました。 – Anton

+0

それは私のプロジェクトで動作します。ポート/ドライバを確認してください。そして 'lwipopts.h' – kyb

+0

TCP通信は私のプロジェクトでうまく動作します。これはUPDに問題がありますか? – Anton

関連する問題