2014-01-05 4 views
1

Я использую crossroot cross toolchain для компиляции приложения Малины с моего компьютера (Ubuntu X86). Я разрабатываю TCP-сервис, который позволяет подключиться к номеру порта TCP 5003 (0x138B). Когда я запускаю сервер, это правильно, но мой сервер ждет подключения на номер порта TCP 35603 (0x8B13) (проверьте с netstat -a).Малина PI: континент CROSS COMPILE

Кажется, проблема с контентом, но я не знаю, как ее решить.

Вы можете мне помочь?

Спасибо.

+2

Узнайте о ntohs и ntohl и друзьях в вашем коде. – bmargulies

+0

Тогда ваш код является проблемой ... он не является «безопасным для конечных пользователей» (не знаю, является ли это правильным английским термином) – deviantfan

+0

Пожалуйста, покажите код, который устанавливает сокет. – nos

ответ

0

благодарит за ответ.

Я согласен, что это очень странно. Я не думаю, что этот код является проблемой. Он хорошо работает на другой платформе.

Вы можете найти код ниже:

/*Create the server */ 
int CreateServeur (unsigned short port, int *sock_srv, int nb_connect) 
{ 
    int l_ret = -1; 
    struct sockaddr_in l_srv_addr; 

    /* address initialisation */ 
    printf("creation serveur port %i\n", port); 
    memset ((char*) &l_srv_addr,0, sizeof (struct sockaddr_in)); 
    l_srv_addr.sin_family  = PF_INET; 
    l_srv_addr.sin_port  = port; 
    l_srv_addr.sin_addr.s_addr = htonl (INADDR_ANY); 

    /* main socket creation */ 
    if ((*sock_srv = socket (PF_INET, SOCK_STREAM, 0)) <= 0) 
    { 
    printf("server socket creation error"); 
    } 
    else 
    { 
    if (bind (*sock_srv, (struct sockaddr *) &l_srv_addr, sizeof (struct sockaddr_in)) == -1) 
    { 
     close (*sock_srv); 
     printf("bind socket error"); 
    } 
    else 
    { 
     if (listen (*sock_srv, nb_connect) == ERROR) 
     { 
      close (*sock_srv); 
      printf("listen socket error"); 
     } 
     else 
     { 
      l_ret = 0; 
     } 
    } 
    } 

    return (l_ret); 
} 

Эта функция не возвращает ошибку. Первый журнал (printf («create serveur port% i \ n», порт);) отображает хороший порт (5003), но подключение сервера к порту 35603 (netstat -a).

Если это не проблема с контентом, я не понимаю.

+0

Вам необходимо перевести ваши данные из энтузиазма сетевого пакета (big endian) на хост (в зависимости от архитектуры). (См. 'Ntohl' и' htonl') –

+0

Я не получил данные из сети, потому что соединение не удалось на порту 5003. Порт сервера исправлен. Проблема в том, что сервер не ожидает подключения на хорошем порту (ожидание на порту 35603). – Totoscill

+0

'ntohs (35603) == 5003'. Нарисуйте соответствующие выводы –