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; }
что делать подскажите. Спасибо.
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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++ »
|
Записан
|
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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 » |
|
нет не хочет,,, не знаю, что делать.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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++ »
|
Записан
|
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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 » |
|
наверно что то ссредой. Интересненько. Пока проблем не было
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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."
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #11 : 05-02-2009 15:02 » |
|
дык
send (s, request, sizeof (request),0))
или на крайняк
send (s, (unsigned char*)request, sizeof (request),0))
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #12 : 05-02-2009 15:03 » |
|
Джон, амперсенда не надо определение же const char request2[]
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #14 : 05-02-2009 15:21 » |
|
#define request "GET /....." - это всё равно const char*. не надо &
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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 » |
|
не один из вариантов не идет.... если бы работало то работали бы все варианты. Надо будет еще поискать в инете. Спасибо за труд если найду ответ напишу.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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); Вот прототип если это имели ввиду
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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))
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #20 : 05-02-2009 16:07 » |
|
я не знаю, что есть Eclipse Это такая свободная IDE для многих языков. http://ru.wikipedia.org/wiki/Eclipsebigturtle, вопрос не в тему. А чего бы тебе не сгрузить студию мелкософтовскую? Ведь бесплатно же. Для твоих целей подойдёт.
|
|
« Последнее редактирование: 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. Тоесть мало вписать ее вверху кода, нужно ее еще включить в свойствах проекта.
|
|
|
Записан
|
|
|
|
bigturtle
Гость
|
|
« Ответ #23 : 05-02-2009 18:23 » |
|
Спасибо большое за внимание, буду дальше изучать....
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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++ »
|
Записан
|
|
|
|
Джон
просто
Администратор
Online
Пол:
|
|
« Ответ #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 файл.
|
|
|
Записан
|
|
|
|
|