Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: TCPIP uCOS
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > uC/OS-II
romashko
юзаю стек TCP-IP под uCOS-II (порт для IAR) для AT91sam7x256-EK

как, используя функции стека TCP-IP передать данные?

к примеру, настройки такие:

IP платы - EK_IP (сервер)
IP компа - PC_IP (клиент)
порт 3128

в натройках сети на компе помечен его IP-шник: PC_IP
маска: 255.255.255.0
шлюз: EK_IP

набираем в фаре: ping EK_IP - обмен есть

теперь нужно передать к примеру, 256 байт от платы к компу.
На компе уже стоИт клиент, позволяющий вбивать IP и порт.

киньте пожалуйста пример или часть кода, реализующего передачу данных! help.gif
_dem
Нужен TCP или UDP ?

Примерно так (выдрано из старого тестового проекта, должно заработать - сейчас не могу проверить)
Подставьте свои порты и IP-адреса (my_addr - локальный сокет, srv_addr - адрес сокета на PC) :

Передача по UDP

Код
unsigned short datasize = 1000;
unsigned char * data = (unsigned char *) malloc( datasize * 20);

// creating socket
struct sockaddr_in my_addr, srv_addr, srv2_addr;

int cln =   socket( SOCK_DGRAM,
             NET_SOCK_TYPE_DATAGRAM ,
             IPPROTO_UDP );
int _status = 0;

my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(100);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  
srv_addr.sin_family = AF_INET;
srv_addr.sin_port = htons(999);
srv_addr.sin_addr.s_addr = htonl(NetASCII_Str_to_IP("192.168.111.33",  &err));



unsigned int net_delay = 5;

// sending some data
while (1)
{
    _status = sendto(
        cln,
        (void *)data,
        datasize,
        0,
        (struct sockaddr *)&srv_addr,
        sizeof(struct sockaddr_in)
    );
         OSTimeDlyHMSM(0, 0, 0, net_delay);
} // sending loop


Передача по TCP (с подключением) :

Код
    unsigned short datasize = 1000;
    unsigned char * data = (unsigned char *) malloc( datasize * 20);

// creating socket
struct sockaddr_in my_addr, srv_addr, srv2_addr;

int cln =   socket( SOCK_STREAM,
             NET_SOCK_TYPE_STREAM ,
             IPPROTO_TCP );
int _status = 0;

my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(100);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  
srv_addr.sin_family = AF_INET;
srv_addr.sin_port = htons(999);
srv_addr.sin_addr.s_addr = htonl(NetASCII_Str_to_IP("192.168.111.33",  &err));

  
_status = connect(    cln,
            (struct sockaddr *)&srv_addr,
            sizeof(struct sockaddr_in)
            );

unsigned int net_delay = 5;

if (_status < 0)
{
    // closing socket - some error occured
    close(cln);
}
else
{
    // here socket connected
    // sending some data
    while (1)
          {
        _status = sendto(
            cln,
            (void *)data,
            datasize,
            0,
            (struct sockaddr *)&srv_addr,
            sizeof(struct sockaddr_in)
        );
             OSTimeDlyHMSM(0, 0, 0, net_delay);
    } // sending loop

}// if connected
maximator
dem, а у меня вот какая проблема: тоже обмен по udp, если не вызывать sendto(), то после включения платы ось быстренько подымается и начинает сразу на ping со стороны компа,а если сделать вызов sendto(), отправляю всего лишь слово "Привет!!!", ось не отвечает на ping и не передает данные 28 сек, а потом начинает и все ок, подскажите в чем может быть проблема
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.