Для создания клиента буду пользоваться Netconn API functions со стека LwIp.
Допустим что на одной плате я запусти HTTP сервер тот что с примера с сайта CTM.
А на второй плате я запущу свой HTTP клиент. Вот как послать своим клиентом самый простой запрос к серверу.
Возникает ряд вопросов:
как работать с ip адресами?
Пусть у сервера будет 192.168.0.10 а у клиента 192.168.0.9.
Нашел функцию для его определения:
netconn_getaddr(conn, &local_ip_address, &port, 1);
Правильно ли я понял: эта функция должна найти адрес другого локального устройства (если флаг 1)? То есть адрес моего сервера ( 192.168.0.10). А если устройств в сети будет больше чем одно, тогда как? Но при использовании netconn_getaddr(conn, &local_ip_address, &port, 1) local_ip_address равняется нулю, но ошибка не возвращается.
Теперь на счет запроса. На стороне сервера есть вот такая проверка запросов:
Код
/* Is this an HTTP GET command? (only check the first 5 chars, since
there are other formats for GET, and we're keeping it very simple )*/
if ((buflen >=5) && (strncmp(buf, "GET /", 5) == 0))
{
/* Check if request to get ST.gif */
if (strncmp((char const *)buf,"GET /STM32F2x7_files/ST.gif",27)==0)
{...}
/* Check if request to get stm32.jpeg */
else if (strncmp((char const *)buf,"GET /STM32F2x7_files/stm32.jpeg",31)==0)
{...}
else if (strncmp((char const *)buf,"GET /STM32F2x7_files/logo.jpg", 29) == 0)
{...}
else if(strncmp(buf, "GET /STM32F2x7TASKS.html", 24) == 0)
{...}
Корректно ли будет отправка такого запроса:
Код
char request[]="GET /STM32F2x7TASKS.html";
Мне вот хотя бы увидеть что клиент передает а сервер это воспринимает и отвечает.
В итоге пробовал это сделать вот так:
Код
struct netconn *conn, *newconn;
err_t err;
struct ip_addr local_ip_address = {0xc0a8000a}; //подствил адрес сервера так как его адрес не читался функцией netconn_getaddr
char request[]="GET /STM32F2x7TASKS.html";
/* Create a new TCP connection handle */
conn = netconn_new(NETCONN_TCP);
if (conn!= NULL)
{
// err = netconn_getaddr(conn, &local_ip_address, &port, 1);
/* Bind to port 80 (HTTP) with default IP address */
err = netconn_bind(conn, &local_ip_address, HTTP_PORT);
if (err == ERR_OK)
{
err=netconn_write(conn, &request, 24, NETCONN_NOCOPY);
/* Close the connection (server closes in HTTP) */
netconn_close(conn);
}
}
netconn_bind проходит успешно. никакой ошибки не возвращается. А вот netconn_write возвращает ошибку (-8 - нет соединения).
В чем я ошибаюсь?