I am using nrf7002-dk as client and running the server python code in my PC and I am using ngrok command line tool get alternate http link.
I am using wifi-fund lesson4 exercise 1 project: client can connect to the default server "echo.thing.rocks" but i can't connect to my server.
if I tried to connect I am getting this error 
from http.server import SimpleHTTPRequestHandler, HTTPServer
# import cgi
# Define the host and port
HOST = '127.0.0.1'
PORT = 8000
# Create a custom request handler
class MyHandler(SimpleHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(b'Hello, world!!!!!')
def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
post_data_str = post_data.decode('utf-8')
print(post_data_str)
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(b'<html><body>')
self.wfile.write(f'<h1>Posted Data:</h1><pre>{post_data_str}</pre>'.encode())
self.wfile.write(b'</body></html>')
# Create and start the server
def run(server_class=HTTPServer, handler_class=MyHandler):
server_address = (HOST, PORT)
httpd = server_class(server_address, handler_class)
print(f'Server running on http://{HOST}:{PORT}')
httpd.serve_forever()
if __name__ == '__main__':
run()
<---- server code
/*
* Copyright (c) 2023 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
*/
#include <errno.h>
#include <stddef.h>
#include <string.h>
#include <stdio.h>
#include <zephyr/kernel.h>
#include <zephyr/types.h>
#include <zephyr/logging/log.h>
#include <dk_buttons_and_leds.h>
#include <zephyr/net/wifi.h>
#include <zephyr/net/wifi_mgmt.h>
#include <zephyr/net/net_mgmt.h>
#include <net/wifi_mgmt_ext.h>
#include <net/wifi_credentials.h>
#include <zephyr/net/socket.h>
/* STEP 1.2 - Include the header file of the HTTP client library */
#include <zephyr/net/http/client.h>
LOG_MODULE_REGISTER(Lesson5_Exercise1, LOG_LEVEL_INF);
#define EVENT_MASK (NET_EVENT_L4_CONNECTED | NET_EVENT_L4_DISCONNECTED)
/* STEP 2 - Define the macros for the HTTP server hostname and port */
#define HTTP_HOSTNAME "http://3c19-49-249-24-106.ngrok-free.app"
#define HTTP_PORT 8000
/* STEP 3 - Declare the necessary buffers for receiving messages */
#define RECV_BUF_SIZE 2048
#define CLIENT_ID_SIZE 50
static char recv_buf[RECV_BUF_SIZE];
static char client_id_buf[CLIENT_ID_SIZE + 2];
/* STEP 4 - Define the variable for the counter as 0 */
static int counter = 0;
static int sock;
static struct sockaddr_storage server;
static struct net_mgmt_event_callback mgmt_cb;
static bool connected;
static K_SEM_DEFINE(run_app, 0, 1);
static void net_mgmt_event_handler(struct net_mgmt_event_callback *cb, uint32_t mgmt_event,
struct net_if *iface)
{
if ((mgmt_event & EVENT_MASK) != mgmt_event) {
return;
}
if (mgmt_event == NET_EVENT_L4_CONNECTED) {
LOG_INF("Network connected");
connected = true;
dk_set_led_on(DK_LED1);
k_sem_give(&run_app);
return;
}
if (mgmt_event == NET_EVENT_L4_DISCONNECTED) {
if (connected == false) {
LOG_INF("Waiting for network to be connected");
} else {
dk_set_led_off(DK_LED1);
LOG_INF("Network disconnected");
connected = false;
}
k_sem_reset(&run_app);
return;
}
}
static int server_resolve(void)
{
int err;
struct addrinfo *result;
struct addrinfo hints = {.ai_family = AF_INET, .ai_socktype = SOCK_STREAM};
err = getaddrinfo(HTTP_HOSTNAME, STRINGIFY(HTTP_PORT), &hints, &result);
if (err != 0) {
LOG_ERR("getaddrinfo failed, err: %d, %s", err, gai_strerror(err));
return -EIO;
}
if (result == NULL) {
LOG_ERR("Error, address not found");
return -ENOENT;
}
struct sockaddr_in *server4 = ((struct sockaddr_in *)&server);
server4->sin_addr.s_addr = ((struct sockaddr_in *)result->ai_addr)->sin_addr.s_addr;
server4->sin_family = AF_INET;
server4->sin_port = ((struct sockaddr_in *)result->ai_addr)->sin_port;
char ipv4_addr[NET_IPV4_ADDR_LEN];
inet_ntop(AF_INET, &server4->sin_addr.s_addr, ipv4_addr, sizeof(ipv4_addr));
LOG_INF("IPv4 address of HTTP server found %s", ipv4_addr);
freeaddrinfo(result);
return 0;
}
static int server_connect(void)
{
int err;
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock < 0) {
LOG_ERR("Failed to create socket, err: %d, %s", errno, strerror(errno));
return -errno;
}
err = connect(sock, (struct sockaddr *)&server, sizeof(struct sockaddr_in));
if (err < 0) {
LOG_ERR("Connecting to server failed, err: %d, %s", errno, strerror(errno));
return -errno;
}
LOG_INF("Connected to server");
return 0;
}
static void response_cb(struct http_response *rsp, enum http_final_call final_data, void *user_data)
{
/* STEP 9 - Define the callback function to print the body */
LOG_INF("Response status: %s", rsp->http_status);
if (rsp->body_frag_len > 0) {
char body_buf[rsp->body_frag_len];
strncpy(body_buf, rsp->body_frag_start, rsp->body_frag_len);
body_buf[rsp->body_frag_len] = '\0';
LOG_INF("Received: %s", body_buf);
}
LOG_INF("Closing socket: %d", sock);
close(sock);
}
static void client_id_cb(struct http_response *rsp, enum http_final_call final_data, void *user_data)
{
/* STEP 6.1 - Log the HTTP response status */
LOG_INF("Response status: %s\n", rsp->http_status);
LOG_INF("data %s\n",(const char*)user_data);
/* STEP 6.2 - Retrieve and format the client ID */
if(rsp->body_frag_len>0){
char client_id_buf_tmp[CLIENT_ID_SIZE + 1];
strncpy(client_id_buf_tmp, rsp->body_frag_start, CLIENT_ID_SIZE);
client_id_buf_tmp[CLIENT_ID_SIZE] = '\0';
client_id_buf[0] = '/';
strcat(client_id_buf, "3c19-49-249-24-106.ngrok-free.app");
LOG_INF("Successfully acquired client ID: %s", client_id_buf);
}
/* STEP 6.3 - Close the socket */
LOG_INF("Closing socket: %d", sock);
close(sock);
}
static int client_http_put(void)
{
/* STEP 7 - Define the function to send a PUT request to the HTTP server */
int err = 0;
int bytes_written;
const char *headers[] = {"Connection: close\r\n", NULL};
struct http_request req;
memset(&req, 0, sizeof(req));
char buffer[12] = {0};
bytes_written = snprintf(buffer, 12, "%d", counter);
if (bytes_written < 0) {
LOG_INF("Unable to write to buffer, err: %d", bytes_written);
return bytes_written;
}
req.header_fields = headers;
req.method = HTTP_PUT;
req.url = client_id_buf;
req.host = HTTP_HOSTNAME;
req.protocol = "HTTP/1.1";
req.payload = buffer;
req.payload_len = bytes_written;
req.response = response_cb;
req.recv_buf = recv_buf;
req.recv_buf_len = sizeof(recv_buf);
LOG_INF("HTTP PUT request: %s", buffer);
err = http_client_req(sock, &req, 5000, NULL);
if (err < 0) {
LOG_ERR("Failed to send HTTP PUT request %s, err: %d", buffer, err);
}
return err;
}
static int client_http_get(void)
{
/* STEP 8 - Define the function to send a GET request to the HTTP server */
int err = 0;
const char *headers[] = {"Connection: close\r\n", NULL};
struct http_request req;
memset(&req, 0, sizeof(req));
req.header_fields = headers;
req.method = HTTP_GET;
req.url = client_id_buf;
req.host = HTTP_HOSTNAME;
req.protocol = "HTTP/1.1";
req.response = response_cb;
req.recv_buf = recv_buf;
req.recv_buf_len = sizeof(recv_buf);
LOG_INF("HTTP GET request");
err = http_client_req(sock, &req, 5000, NULL);
if (err < 0) {
LOG_ERR("Failed to send HTTP GET request, err: %d", err);
}
return err;
}
static int client_get_new_id(void)
{
int err = 0;
/* STEP 5.1 - Define the structure http_request and fill the block of memory */
struct http_request req;
memset(&req, 0, sizeof(req));
/* STEP 5.2 - Populate the http_request structure */
const char *headers[] = {"Connection: close\r\n", NULL};
req.header_fields = headers;
req.method = HTTP_POST;
req.url = "/";
req.host = HTTP_HOSTNAME;
req.protocol = "HTTP/1.1";
req.response = client_id_cb;
req.recv_buf = recv_buf;
req.recv_buf_len = sizeof(recv_buf);
/* STEP 5.3 - Send the request to the HTTP server */
LOG_INF("HTTP POST request");
err = http_client_req(sock, &req, 5000, NULL);
if (err < 0) {
LOG_ERR("Failed to send HTTP POST request, err: %d", err);
}
return err;
}
static void button_handler(uint32_t button_state, uint32_t has_changed)
{
/* STEP 10 - Define the button handler to send requests upon button triggers */
if (has_changed & DK_BTN1_MSK && button_state & DK_BTN1_MSK) {
if (server_connect() >= 0) {
client_http_put();
counter++;
}
} else if (has_changed & DK_BTN2_MSK && button_state & DK_BTN2_MSK) {
if (server_connect() >= 0) {
client_http_get();
}
}
}
int main(void)
{
if (dk_leds_init() != 0) {
LOG_ERR("Failed to initialize the LED library");
}
/* Sleep to allow initialization of Wi-Fi driver */
k_sleep(K_SECONDS(1));
net_mgmt_init_event_callback(&mgmt_cb, net_mgmt_event_handler, EVENT_MASK);
net_mgmt_add_event_callback(&mgmt_cb);
LOG_INF("Waiting to connect to Wi-Fi");
k_sem_take(&run_app, K_FOREVER);
if (dk_buttons_init(button_handler) != 0) {
LOG_ERR("Failed to initialize the buttons library");
}
if (server_resolve() != 0) {
LOG_ERR("Failed to resolve server name");
return 0;
}
if (server_connect() != 0) {
LOG_ERR("Failed to initialize client");
return 0;
}
/* STEP 11 - Retrieve the client ID upon connection */
if (client_get_new_id() < 0) {
LOG_ERR("Failed to get client ID");
return 0;
}
return 0;
}
<----client code