Перейти к содержанию
    

TCPIP uCOS

юзаю стек 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:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужен 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

Изменено пользователем _dem

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

dem, а у меня вот какая проблема: тоже обмен по udp, если не вызывать sendto(), то после включения платы ось быстренько подымается и начинает сразу на ping со стороны компа,а если сделать вызов sendto(), отправляю всего лишь слово "Привет!!!", ось не отвечает на ping и не передает данные 28 сек, а потом начинает и все ок, подскажите в чем может быть проблема

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...