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を使用してデータを受信する前に接続をバインドする必要がありますか?それとも忘れたの?
私はこの実装を試みましたが、同じ方法で失敗しました - lwip_recvfromは-1を返しました。 – Anton
それは私のプロジェクトで動作します。ポート/ドライバを確認してください。そして 'lwipopts.h' – kyb
TCP通信は私のプロジェクトでうまく動作します。これはUPDに問題がありますか? – Anton