Jump to content

    

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:

Share this post


Link to post
Share on other sites

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

Edited by _dem

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this