Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> socket, нет связи c клиентом 
:(
    Опции темы
mustelus
Дата 2.6.2010, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 13.9.2009

Репутация: нет
Всего: нет



Доброго времени суток госпада... Дико извенюсь заранее если "вдруг" повторю тему...

Клиент:

Код

m_edit1->SetWindowTextA("TCP DEMO CLIENT");
    // Шаг 1 - инициализация библиотеки Winsock
    if (WSAStartup(0x202, (WSADATA *)&buff[0]))
    {
       m_edit1->SetWindowTextA("WSAStart error ");
    }
   
    my_sock = socket(AF_INET, SOCK_STREAM, 0);
    if (my_sock < 0)
    {
      m_edit1->SetWindowTextA("Socket error ");
    }
   
    // заполнение структуры sockaddr_in - указание адреса и порта сервера
    sockaddr_in dest_addr;
    dest_addr.sin_family = AF_INET;
    dest_addr.sin_port = htons(PORT);
    HOSTENT *hst;

    // преобразование IP адреса из символьного в сетевой формат
    if (inet_addr(SERVERADDR) != INADDR_NONE)
        dest_addr.sin_addr.s_addr = inet_addr(SERVERADDR);
    else
    {
        // попытка получить IP адрес по доменному имени сервера
        if (hst = gethostbyname(SERVERADDR))
            // hst->h_addr_list содержит не массив адресов,
            // а массив указателей на адреса
            ((unsigned long *)&dest_addr.sin_addr)[0] =
            ((unsigned long **)hst->h_addr_list)[0][0];
        else
        {
           m_edit1->SetWindowTextA("Invalid address ");
            closesocket(my_sock);
            WSACleanup();
            
        }
    }

    // адрес сервера получен - пытаемся установить соединение
    if (connect(my_sock, (sockaddr *)&dest_addr, sizeof(dest_addr)))
    {
      m_edit2->SetWindowTextA("Соединение error ");
    }
    else
    {
 m_edit2->SetWindowTextA("Соединение с успешно установлено ");
    }


Сервак:

  
Код

  if (WSAStartup(0x0202, (WSADATA *)&buff[0]))
    {
        m_edit1->SetWindowTextA("Error");
    }

    // Шаг 2 - создание сокета
    // AF_INET - сокет Интернета
    // SOCK_STREAM - потоковый сокет (с установкой соединения)
    // 0 - по умолчанию выбирается TCP протокол
    if ((mysocket = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        
        m_edit1->SetWindowTextA("Error socket");
        WSACleanup(); // Деиницилизация библиотеки Winsock
        
    }

    sockaddr_in local_addr;
    local_addr.sin_family = AF_INET;
    local_addr.sin_port = htons(MY_PORT); 
    local_addr.sin_addr.s_addr = 0; 

   
    if (bind(mysocket, (sockaddr *)&local_addr, sizeof(local_addr)))
    {
        // Ошибка
        m_edit1->SetWindowTextA("Error bind");
        closesocket(mysocket); // закрываем сокет!
        WSACleanup();
     }
    
    // размер очереди - 0x100
    if (listen(mysocket, 0x100))
    {
        // Ошибка
        m_edit1->SetWindowTextA("Error listen");
        closesocket(mysocket);
        WSACleanup();
     }

    m_edit1->SetWindowTextA("Ожидание подключений...");

    // Шаг 5 - извлекаем сообщение из очереди
    int client_addr_size = sizeof(client_addr);

    // цикл извлечения запросов на подключение из очереди
    while ((client_socket = accept(mysocket, (sockaddr *)&client_addr, &client_addr_size)))
    {
        nclients++; // увеличиваем счетчик подключившихся клиентов

        // пытаемся получить имя хоста
       
        hst = gethostbyaddr((char *)&client_addr. sin_addr.s_addr, 4, AF_INET);

        // вывод сведений о клиенте
       m_edit1->SetWindowTextA("new connect!");

    }
   
    }


Так вот, проблема в том что есть два компа соединееных прямым кабелем, и вот между ними не создаеться соединение (клиента и сервака)...
Может на вскидку скажете куда "рыть"

Все сделано в MFC MS VS2008

СПАСИБО

Это сообщение отредактировал(а) Олег2005 - 6.6.2010, 09:57
PM MAIL   Вверх
boostcoder
Дата 3.6.2010, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



для начала, вставь код в теги.
PM WWW   Вверх
mustelus
Дата 3.6.2010, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 13.9.2009

Репутация: нет
Всего: нет



А что, если socket-ом пользуешся обертки тоже нужны...
А какие именно теги использовать не подскажете... (может есть пример?)
PM MAIL   Вверх
jimbo
Дата 3.6.2010, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.6.2009
Где: Южно-Сахалинск

Репутация: нет
Всего: нет



Все уже давно написано. Модифицируйте этот код под mfc и будет счастье:



http://msdn.microsoft.com/en-us/library/ms...28VS.85%29.aspx

Добавлено через 1 минуту и 29 секунд
ЗЫ 
заключайте свой код в тег <code>

без точек конечно

<.code.>
#include <stdio.h>
<./code.>

--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин
PM MAIL WWW   Вверх
mustelus
Дата 3.6.2010, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 13.9.2009

Репутация: нет
Всего: нет



Вы знаете, веть этот код тоже как бы должен работать, тем более что там все почти тоже что и  в примерах по вашей ссылке...
Где вообще почитать про ети обертки и главное как их сделать самому...
В нете дочерта примеров типо работающих, а на самом деле не работают, вот всеравно "не чувствую" такого явления как обертки для сокетов...
Покажите простейший пример обертки...
PM MAIL   Вверх
mustelus
Дата 4.6.2010, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 13.9.2009

Репутация: нет
Всего: нет



Цитата(mustelus @ 3.6.2010,  06:49)
Тормознул:

А что, если socket-ом пользуешся обертки тоже нужны...
А какие именно теги использовать не подскажете... (может есть пример?)

клиент:

Код

m_edit1->SetWindowTextA("TCP DEMO CLIENT");
    // Шаг 1 - инициализация библиотеки Winsock
    if (WSAStartup(0x202, (WSADATA *)&buff[0]))
    {
       m_edit1->SetWindowTextA("WSAStart error ");
        
    }
   
    my_sock = socket(AF_INET, SOCK_STREAM, 0);
    if (my_sock < 0)
    {
      m_edit1->SetWindowTextA("Socket error ");
        
    }

    
    // заполнение структуры sockaddr_in - указание адреса и порта сервера
    sockaddr_in dest_addr;
    dest_addr.sin_family = AF_INET;
    dest_addr.sin_port = htons(PORT);
    HOSTENT *hst;

    // преобразование IP адреса из символьного в сетевой формат
    if (inet_addr(SERVERADDR) != INADDR_NONE)
        dest_addr.sin_addr.s_addr = inet_addr(SERVERADDR);
    else
    {
        // попытка получить IP адрес по доменному имени сервера
        if (hst = gethostbyname(SERVERADDR))
            // hst->h_addr_list содержит не массив адресов,
            // а массив указателей на адреса
            ((unsigned long *)&dest_addr.sin_addr)[0] =
            ((unsigned long **)hst->h_addr_list)[0][0];
        else
        {
           m_edit1->SetWindowTextA("Invalid address ");
            closesocket(my_sock);
            WSACleanup();
            
        }
    }

    // адрес сервера получен - пытаемся установить соединение
    if (connect(my_sock, (sockaddr *)&dest_addr, sizeof(dest_addr)))

    {
      m_edit2->SetWindowTextA("Соединение error ");
       
    }
    else
    {
 m_edit2->SetWindowTextA("Соединение с успешно установлено ");

 
сервак:

Код

if (WSAStartup(0x0202, (WSADATA *)&buff[0]))
    {
        m_edit1->SetWindowTextA("Error");
    }

    // Шаг 2 - создание сокета
    // AF_INET - сокет Интернета
    // SOCK_STREAM - потоковый сокет (с установкой соединения)
    // 0 - по умолчанию выбирается TCP протокол
    if ((mysocket = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        
        m_edit1->SetWindowTextA("Error socket");
        WSACleanup(); // Деиницилизация библиотеки Winsock
        
    }

  
    sockaddr_in local_addr;
    local_addr.sin_family = AF_INET;
    local_addr.sin_port = htons(MY_PORT); 
    local_addr.sin_addr.s_addr = 0; 

   
    if (bind(mysocket, (sockaddr *)&local_addr, sizeof(local_addr)))
    {
        // Ошибка
        m_edit1->SetWindowTextA("Error bind");
        closesocket(mysocket); // закрываем сокет!
        WSACleanup();
        
    }

    
    // размер очереди - 0x100
    if (listen(mysocket, 0x100))
    {
        // Ошибка
        m_edit1->SetWindowTextA("Error listen");
        closesocket(mysocket);
        WSACleanup();
        
    }

    m_edit1->SetWindowTextA("Ожидание подключений...");

    // Шаг 5 - извлекаем сообщение из очереди

    int client_addr_size = sizeof(client_addr);

    // цикл извлечения запросов на подключение из очереди
    while ((client_socket = accept(mysocket, (sockaddr *)&client_addr, &client_addr_size)))
    {
        nclients++; // увеличиваем счетчик подключившихся клиентов

        // пытаемся получить имя хоста
       
        hst = gethostbyaddr((char *)&client_addr. sin_addr.s_addr, 4, AF_INET);

        // вывод сведений о клиенте
       m_edit1->SetWindowTextA("new connect!");
        
    }
      }



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0899 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.