реклама на сайте
подробности

 
 
> uip web-client
slavokhire5
сообщение Sep 4 2014, 14:00
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 31-03-14
Из: Харьков
Пользователь №: 81 165



Здравствуйте, форумчанеsm.gif

Мне нужно отправлять на сервер данные в виде POST-запросов.
Выбор пал на UIP ( lwip вроде надежнее, но в контроллере уж очень места мало свободного), пытаюсь запустить web-client. Пример с сайта производителя для меня немного непонятен. Его нужно допиливать, а знаний по всяким сетевым вещам у меня нет, потихоньку читаю, но быстро вряд ли получится. Есть ли у кого-то пример web-client на UIP, который будет не жалко дать "пощупать" ? sm.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
slavokhire5
сообщение Sep 5 2014, 14:05
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 31-03-14
Из: Харьков
Пользователь №: 81 165



Продолжаю ковырять стек. Прочитал переведенную на русский справку по uip, но особо к решению не продвинулся. в uip выбрал режим webclient. остальные строки с файлами в uip-conf.h закомментил. Разрешил UIP_CONF_UDP, т.к. без него почему-то лезут ошибки...


Железо - stm32f107vb и lan8510a. Вебсервер из примера заработал хорошо.
Клиент, естественно, нетsm.gif Код, который я менял и, как я думаю, должен инициализировать uip и запускать get:


CODE
uint32_t uIPMain(void)
{

uip_ipaddr_t ipaddr;

struct uip_conn *conn;


// Sys timer init 1/100 sec tick
clock_init(2);

timer_set(&periodic_timer, CLOCK_SECOND / 2);
timer_set(&arp_timer, CLOCK_SECOND * 10);

// Initialize the ethernet device driver
// Init MAC
// Phy network negotiation
tapdev_init();


// Initialize the uIP TCP/IP stack.
uip_init();
uip_arp_init();


// Init WEB server
uip_ipaddr(&ipaddr, 192,168,0,114);
uip_sethostaddr(&ipaddr);
uip_ipaddr(&ipaddr, 192,168,0,1);
uip_setdraddr(&ipaddr);
uip_ipaddr(&ipaddr, 255,255,255,0);
uip_setnetmask(&ipaddr);


webclient_init();
resolv_init();

return(1);
}




CODE
void vEth(void *pvParameters) {

extern struct timer periodic_timer, arp_timer;
uint32_t i;

Ethernet_Test();

uip_ipaddr_t ipaddr;

char host[] = {"192.168.0.10"};
char buff[300] = { };

uip_ipaddr(&ipaddr, 192,168,0,10);
webclient_get(&host[0],HTONS(80),&buff[0]);

for (;;) {

uip_len = tapdev_read(uip_buf);
if(uip_len > 0)
{
if(BUF->type == htons(UIP_ETHTYPE_IP))
{
uip_arp_ipin();
uip_input();
// If the above function invocation resulted in data that
// should be sent out on the network, the global variable
// uip_len is set to a value > 0.
if(uip_len > 0)
{
uip_arp_out();
tapdev_send(uip_buf,uip_len);
}
}
else if(BUF->type == htons(UIP_ETHTYPE_ARP))
{
uip_arp_arpin();
// If the above function invocation resulted in data that
// should be sent out on the network, the global variable
// uip_len is set to a value > 0.
if(uip_len > 0)
{
tapdev_send(uip_buf,uip_len);
}
}
}
else if(timer_expired(&periodic_timer))
{
timer_reset(&periodic_timer);
for(i = 0; i < UIP_CONNS; i++)
{
uip_periodic(i);
// If the above function invocation resulted in data that
// should be sent out on the network, the global variable
// uip_len is set to a value > 0.
if(uip_len > 0)
{
uip_arp_out();
tapdev_send(uip_buf,uip_len);
}
}
/*#if UIP_UDP
for(i = 0; i < UIP_UDP_CONNS; i++) {
uip_udp_periodic(i);
// If the above function invocation resulted in data that
// should be sent out on the network, the global variable
// uip_len is set to a value > 0.
if(uip_len > 0) {
uip_arp_out();
tapdev_send();
}
}
//#endif // UIP_UDP*/
// Call the ARP timer function every 10 seconds.
if(timer_expired(&arp_timer))
{
timer_reset(&arp_timer);
uip_arp_timer();
}
}
}
vTaskDelete(NULL);
}



webclient_get возвращает 1, wireshark никаких запросов, похожих на мой, не видит. webclient_appcall() из файла webclient.c не вызывается (наверное должен). Железка пингуется. Подскажите пожалуйста, где может быть ошибка
Go to the top of the page
 
+Quote Post
slavokhire5
сообщение Sep 9 2014, 13:58
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 31-03-14
Из: Харьков
Пользователь №: 81 165



GET-запрос отправить получилось таки =)

CODE
uint32_t uIPMain(void)
{
//uint32_t i;
uip_ipaddr_t ipaddr;

// Sys timer init 1/100 sec tick
clock_init(2);

timer_set(&periodic_timer, CLOCK_SECOND / 2);
timer_set(&arp_timer, CLOCK_SECOND * 10);

// Initialize the ethernet device driver
// Init MAC
// Phy network negotiation
tapdev_init();

// Initialize the uIP TCP/IP stack.
uip_init();

// Init WEB server
uip_ipaddr(ipaddr, 10,0,0,21);
uip_sethostaddr(ipaddr);
uip_ipaddr(ipaddr, 10,0,0,1);
uip_setdraddr(ipaddr);
uip_ipaddr(ipaddr, 255,0,0,0);
uip_setnetmask(ipaddr);


// u8_t mac[6] = {0x01,0x02,0x03,0x04,0x05,0x06};
// dhcpc_init(&mac[0], 6);
// vTaskDelay(1000);
// dhcpc_request();


webclient_init();
resolv_init();

uip_ipaddr (ipaddr, 8,8,8,8); // DNS-server of the Google
resolv_conf (ipaddr);
resolv_query ( "www.sics.se" );
webclient_get("www.sics.se", 80, "/~adam/uip");

return(1);
}


CODE
void vEth(void *pvParameters) {




extern struct timer periodic_timer, arp_timer;
uint32_t i;

Ethernet_Test();

for (;;) {

uip_len = tapdev_read(uip_buf);
if(uip_len > 0)
....
}


Долго не мог отправить GET, т.к. uip использует у меня TIM2 и было неправильно настроено прерывание =)
*да простит меня модератор за монолог


Go to the top of the page
 
+Quote Post
Aaron
сообщение Sep 18 2014, 07:33
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 5-10-06
Из: Зеленоград
Пользователь №: 21 007



slavokhire5, не стесняйтесь насчёт монолога - вы выговорились, а другому потом поможет ваша тема wink.gif Хорошо, что сами проблему решили!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 22:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01417 секунд с 7
ELECTRONIX ©2004-2016