Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Eclipse и сокет.  (Прочитано 23086 раз)
0 Пользователей и 1 Гость смотрят эту тему.
bigturtle
Гость
« : 03-02-2009 15:52 » 

Здравствуйте, начал изучать сокеты. Воспользовался материалами сайта вот статья https://club.shelek.ru/viewart.php?id=37 вот исходник
http://club.shelek.ru/filesforarticles/pepper/ws3_1.zip.

 Так  вот в среде Eclipse  выдает ошибку

Severity and Description   Path   Resource   Location   Creation Time   Id
cannot convert `char (*)[53]' to `const char*' for argument `2' to `int send(SOCKET, const char*, int, int)'   ws2/src   ws2.cpp   line 56   1233655978265   11686


и этот фрагмент подчеркивает,

Код:
if ( send(s,&request,sizeof(request), 0)==SOCKET_ERROR)
{
// Error
return -1;
}
что делать подскажите.
Спасибо.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 03-02-2009 16:04 » 

Ну во-первых, надо отдать себе отчёт в том, что в статье речь всё-таки идёт о виндовских сокетах, те о программировании под виндой.

Во-вторых, (если первое условие выполнено) необходимо наличие всех актуальных (или описаных в статье) библиотек и/или платформ. Судя по ошибке, компилятору неизвестна ф-я с именно такими параметрами. Это случается, когда на рабочей платформе используются заголовочные файлы, отличные от тех, которые использовались в статье.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
bigturtle
Гость
« Ответ #2 : 03-02-2009 16:12 » 

так под виндой и программирую скачал все нужны библиотеки mingw. Там присутствует winsock2.h и winsock.h. Так, что вроде должно работать.

ага не могу найти файл Wsock32.lib может из заэтого

нет нашел там есть пакет libwsock32.a это оно
« Последнее редактирование: 03-02-2009 16:46 от Алексей1153++ » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 03-02-2009 16:50 » 

Хммм... ща прогнал код на 6ой студии  - всё в порядке.

Смотри в коде второй параметр определён как константная строка

#define request "GET /index.shtml HTTP/1.1\r\nHost: www.an*th*rd.com\r\n\r\n"

А у твоя Еclipse это почему-то не понимает. что это константная строка. Попробуй добавь const или ещё чё-нить. Проверить не могу, тк нет у меня её.

Вот так попробуй: в main добавь вот такое

Код:
int main(int argc, char* argv[])
{
const char request2[] = "GET /index.shtml HTTP/1.1\r\nHost: www.an*th*rd.com\r\n\r\n";

...

а в send обратись к нему без &

Код:
if (SOCKET_ERROR == send (s, request2, sizeof (request), 0) )

« Последнее редактирование: 05-02-2009 18:40 от Алексей1153++ » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
bigturtle
Гость
« Ответ #4 : 05-02-2009 14:31 » 

нет не хочет,,, не знаю, что делать.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 05-02-2009 14:44 » 

bigturtle, а что не хочет то ? А ты, кстати, инициализацию сокетов делал ? )
Записан

bigturtle
Гость
« Ответ #6 : 05-02-2009 14:51 » 

Вот код
Код:

#include <winsock2.h>

#include <conio.h>
#include <stdio.h>
// Необходимые дефайны
#define request "GET /index.shtml HTTP/1.1\r\nHost: www.an*th*rd.com\r\n\r\n"//HTML запрос.
#define MAX_PACKET_SIZE  65535


int main(int argc, char* argv[])
{

// const char request2[] = "GET /index.shtml HTTP/1.1\r\nHost: www.an*th*rd.com\r\n\r\n";
        WSADATA         ws;
        SOCKET          s;
        sockaddr_in     adr;
        hostent*        hn;
        char            buff [MAX_PACKET_SIZE];

        // Init
        if (WSAStartup (0x0202, &ws) != 0)
        {
                // Error
                return -1;
        }

        // Создаём сокет
        if (INVALID_SOCKET == (s = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP) ) )
        {
                // Error
                return -1;
        }


        // Получаем адрес
        if (NULL == ( hn = gethostbyname ("www.an*th*rd.com") ) )
        {
                // Error
                return -1;
        }

        // Заполняем  поля структуры adr для использование ее в connect
        adr.sin_family                          = AF_INET;
        adr.sin_addr.S_un.S_addr        = *(DWORD* ) hn->h_addr_list[0];
        adr.sin_port                            = htons (80);

        // Устанавливаем соединение с сервером
        if (SOCKET_ERROR == connect (s, (sockaddr* )&adr,  sizeof (adr) ) )
        {
                // Error
                int res = WSAGetLastError ();
                //return -1;
        }

        // Посылаем запрос серверу
   if (SOCKET_ERROR ==  send (s, &request, sizeof (request),0))
        {
                // Error
                int res = WSAGetLastError ();
                return -1;
        }


        // Ждём ответа
        int len = 0;
        do
        {
                if (SOCKET_ERROR == (len = recv (s, (char *) &buff, MAX_PACKET_SIZE, 0) ) )
                {
                        int res = WSAGetLastError ();
                        return -1;
                }
                        for (int i = 0; i<len; i++)
                                printf ("%c", buff [i]);

        }
        while (len!=0); //Получаем данные по частям, пока не len != 0.

        if (SOCKET_ERROR == closesocket (s) )   // закрываем соединенеие. *
        {
                // Error
                return -1;
        }


        return 1;

}
не хочет работать Да-да
« Последнее редактирование: 05-02-2009 18:41 от Алексей1153++ » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 05-02-2009 14:51 » 

Лёш, у него компилятор ругается на неправильный тип параметра ф-ции send

cannot convert char (*)[53]' to const char* for argument 2 to int send(SOCKET, const char*, int, int)

Инициаллизация здесь не при чём. Пока во всяком случае. Как я уже сказал, на 6ой студии код компилится без ошибок и предупреждений.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
bigturtle
Гость
« Ответ #8 : 05-02-2009 14:53 » 

наверно что то ссредой. Интересненько. Пока проблем не было
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 05-02-2009 14:59 » 

bigturtle, в "моём" варианте какую ошибку получаешь?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #10 : 05-02-2009 15:01 » 

Знаешь ещё что попробуй с явным кастингом:


Код:
if ( send(s, (const char*)(&request),sizeof(request), 0)==SOCKET_ERROR)
{
// Error
return -1;
}
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 05-02-2009 15:02 » 

дык

send (s, request, sizeof (request),0))

или на крайняк

send (s, (unsigned char*)request, sizeof (request),0))


Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 05-02-2009 15:03 » 

Джон, амперсенда не надо Ага

определение же
const char request2[]
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #13 : 05-02-2009 15:16 » 

Лёш, это в "моём" варианте, там его действительно не надо я и не написал. bigturtle же использует #define request, поэтому с &, а "мой" вариант он закоментировал.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 05-02-2009 15:21 » 

#define request "GET /....."
 - это всё равно const char*. не надо &
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #15 : 05-02-2009 15:31 » 

Лёш, это у тебя в 6ой студии, и у меня. А ты в Eclipse пробовал?

ps Проектик сгрузи и компильни. Код оригинальный всё компилится без ошибок. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
bigturtle
Гость
« Ответ #16 : 05-02-2009 15:33 » 

не один из вариантов не идет.... если бы работало то работали бы все варианты. Надо будет еще поискать в инете. Спасибо за труд если найду ответ напишу.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #17 : 05-02-2009 15:35 » 

я не знаю, что есть Eclipse, кроме того, чтог это затмение по английски ))

bigturtle, попробуй привести к (void*)

а ещё покажи прототип send
Записан

bigturtle
Гость
« Ответ #18 : 05-02-2009 15:46 » 

int PASCAL send(SOCKET,const char*,int,int); Вот прототип если это имели ввиду
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #19 : 05-02-2009 15:59 » 

сделай так

#define request "GET /....."

send (s, (unsigned char*)&request[0], sizeof (request),0))

или так

send (s, (unsigned char*)(void*)&request[0], sizeof (request),0))
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #20 : 05-02-2009 16:07 » 

я не знаю, что есть Eclipse

Это такая свободная IDE для многих языков.
http://ru.wikipedia.org/wiki/Eclipse

bigturtle, вопрос не в тему. А чего бы тебе не сгрузить студию мелкософтовскую? Ведь бесплатно же. Для твоих целей подойдёт.
« Последнее редактирование: 05-02-2009 16:09 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
bigturtle
Гость
« Ответ #21 : 05-02-2009 16:09 » 

та вот уже такие мысли приходят в голову. Просто раньше проблем не было.
Записан
bigturtle
Гость
« Ответ #22 : 05-02-2009 18:22 » 

Я нашел ошибку. Вопрос был специфический и больше посвящен кроссплатформенному программированию и среде eclipse  в частности. Нужно в строке   if (SOCKET_ERROR == send (s, &request, sizeof (request), 0) )
убрать   амперсанд. И главное подключить библиотеку внутри самой eclipse. Тоесть мало вписать ее вверху кода, нужно ее еще включить в свойствах проекта.

* Безымянный.png (47.58 Кб - загружено 806 раз.)
Записан
bigturtle
Гость
« Ответ #23 : 05-02-2009 18:23 » 

Спасибо большое за внимание, буду дальше изучать....
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #24 : 05-02-2009 18:34 » 

bigturtle, хех... Джон тебе ещё в 3 посте про & сказал
Записан

bigturtle
Гость
« Ответ #25 : 05-02-2009 18:35 » 

ага но там надо было строчку поменять на const char request2[] = "GET /index.shtml HTTP/1.1\r\nHost: www.an*th*rd.com\r\n\r\n";
« Последнее редактирование: 05-02-2009 18:41 от Алексей1153++ » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #26 : 05-02-2009 19:22 » 

Так ты так и не сказал, какая ошибка у тебя вылазила с const char request2[]
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
bigturtle
Гость
« Ответ #27 : 06-02-2009 17:14 » 

Таже, что и раньше, просто нужно было подключить lib файл.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines