Официальный форум СВД Встраиваемые Системы
28 Март, 2024, 16:38:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: связь QNX6.5 c Win-7 по TCP/IP сокетами  (Прочитано 2415 раз)
Сергей123
Интересующийся

Сообщений: 6


« : 30 Сентябрь, 2013, 10:28:54 »

В QNX cделал две программы: клиент (посылает), сервер (принимает) по сокету чтобы потом связать QNX6.5.1 c Win-7. Программа сервер запускается и ждет. Программа клиент завершается по ошибке на функции connect. Печатает: ошибка подключения к stream socket. В настройках QNX 6.5 ничего не менял, не добавлял. Что я не сделал или что делаю не правильно. Помогите, пожалуйста разобраться. Тексты программ ниже.
/* Программная компонента TCP/IP */
#include "./include/tcpip.h"
Программа-сервер:
/* Программная компонента TCP/IP */
#include "./include/tcpip.h"

#define TRUE 1

int main(int argc, char **argv )
{
int sock, length;
struct sockaddr_in server;
int msgsock;
char buf[1024];
int rval, f_vd;

   /**************** Создание сокета *******************/
   sock = socket(AF_INET, SOCK_STREAM, 0);
      if (sock < 0) {
         perror("Ошибка создания stream сокета");
         exit(1);
      }
   /**************** Создание имени сокета *******************/
   server.sin_family = AF_INET;
   server.sin_addr.s_addr = INADDR_ANY;
   server.sin_port = htons(3151);
   //server.sin_port = 0;

   /**************** Привязка имени к сокету *******************/
      if (bind(sock, (struct sockaddr *)&server, sizeof(server))) {
         perror("ошибка привязки stream socket");
         exit(1);
      }

   /**************** Поиск номера порта и печать *******************/
   length = sizeof(server);
      if (getsockname(sock, (struct sockaddr *)&server, &length)) {
         perror("getting socket name");
         exit(1);
      }
      printf("Socket использует порт #%d\n", ntohs(server.sin_port));

   /********** Ожидание accepting connections *********/
      listen(sock, 5);
         do {
            msgsock = accept(sock, 0, 0);
            if (msgsock == -1) {
               perror("ошибка accept");
               return EXIT_FAILURE;
            } else
            f_vd = open("/reg/mip.prm", O_WRONLY | O_CREAT | O_APPEND,S_IRUSR | S_IWUSR);
            do {
            memset(buf, 0, sizeof(buf));
            if ((rval  = read(msgsock, buf,  1024)) < 0)
               perror("ошибка reading stream message");
            else if (rval == 0) {
               printf("Ending connection\n");
               close (f_vd);
            }
            else {printf("-->%s\n", buf);
            write( f_vd, buf, rval);
               }
                        } while (rval > 0);
            close(msgsock);
         } while (TRUE);
}
Программа клиент:
/* Программная компонента TCP/IP */
#include "./include/tcpip.h"

#define DATA "Привет от клиента протокола TCP/IP . . ."
#define TRUE 1

void main(int argc, char **argv )
{
int sock;
struct sockaddr_in server;
struct hostent *hp, *gethostbyname();

   /**************** Создание сокета *******************/
   sock = socket(AF_INET, SOCK_STREAM, 0);
      if (sock < 0) {
         perror("Ошибка создания stream сокета");
         exit(1);
      }

   /*** Получение сетевого адреса и номера порта из командной строки ***/
   server.sin_family = AF_INET;
   hp = gethostbyname(argv[1]);
      if (hp == 0) {
         fprintf(stderr, "%s: неизвестный хост\n", argv[1]);
         exit(2);
      }
   memcpy(&server.sin_addr, hp->h_addr, hp->h_length);
   server.sin_port = htons(3151);
   /************** Подключение к сокету **************/
   if (connect(sock, (struct sockaddr *)&server, sizeof(server)) < 0) {
      perror("ошибка подключения к stream socket");
      exit(1);
   }

   /************** Запись в сокет **************/
   do {
      delay(1000);
      if (write(sock, DATA, sizeof(DATA)) < 0)
         perror("ошибка записи в stream socket");
      } while (TRUE);
   close(sock);
}
Записан
Андрей Сеньков
Администратор
Ветеран

Сообщений: 339



WWW
« Ответ #1 : 30 Сентябрь, 2013, 17:52:16 »

Здравствуйте!

Полезно знать с какой именно ошибкой завершается функция connect, т.е. полный вывод perror.

Функция connect может не установить соединение, например, в следующих случаях:
- нет связи по IP между машинам (связь обычно проверяется через ping);
- на удаленной машине не запущен сервер на нужный порт (в QNX можно посмотреть через netstаt -a). Кроме этого порт не должен быть закрыт МЭ;
- в функцию переданы неверные или некорректные параметры.
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2020 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 30 Август, 2022, 17:25:11