|
|
|
| Ни, как не получается получить код веб страницы с помощью сокетов, зная адрес (например www.mail.ru). А потом вывести в консоль, либо сохранить в файл.
У меня Linux OpenSUSE, Kdevelop.
Использовал код этой статьи http://www.opennet.ru/docs/RUS/linux_parallel/node82.html.
Вот код что я испытывал:
#include <iostream>
#include <cstdlib>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <sys/un.h>
#define ADDRESS "www.mail.ru" /* адрес для связи */
using namespace std;
int main(int argc, char *argv[])
{
char c;
int i, s, len;
FILE *fp;
struct sockaddr_un sa;
// создаём сокет
s = socket(AF_INET, SOCK_STREAM, 0);
// проверка создания сокета
if(s < 0) {
perror("socket");
exit(1);
} // конец условия
sa.sun_family = AF_UNIX;
strcpy (sa.sun_path, ADDRESS);
/* пытаемся связаться с сервером: */
len = sizeof ( sa.sun_family) + strlen ( sa.sun_path);
if ( connect ( s, &sa, len) < 0 ){
perror ("client: connect"); exit (1);
}
close (s);
return EXIT_SUCCESS;
}
|
Выдаёт ошибку: /home/quies/Develop/C++/http/src/http.cpp:74: error: cannot convert 'sockaddr_un*' to 'const sockaddr*' for argument '2' to 'int connect(int, const sockaddr*, socklen_t)'
Это только конект,. а хотелось бы получить ещё страницу. Но до этого пока не дошел. | |
|
|
|
|
|
|
|
для: Quies
(04.10.2008 в 17:22)
| | Пока, вышел такой код:
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <iostream>
#include <cstdlib>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <sys/un.h>
#include <arpa/inet.h>
#define NSTRS 30 /* no. of strings */
using namespace std;
int main ( int argc, char *argv[] )
{
char c;
FILE *fp;
int i;
int thisSocket;
struct sockaddr_in destination;
destination.sin_family = AF_INET;
thisSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (thisSocket < 0)
{
printf("\nSocket Creation FAILED!");
return 0;
} else {
destination.sin_port = htons(80);
destination.sin_addr.s_addr = inet_addr("127.0.0.1");
if (connect(thisSocket,(struct sockaddr*)&destination,sizeof(destination))!=0){
printf("\nSocket Connection FAILED!\n");
if (thisSocket) close(thisSocket);
return 0;
}
printf("\nConnected!");
fp = fdopen(thisSocket, "r");
for (i = 0; i < NSTRS; i++) {
while ((c = fgetc(fp)) != EOF) {
putchar(c);
if (c == '\n')
break;
}
}
printf("%s",c);
} // конец условия
close(thisSocket);
return EXIT_SUCCESS;
}
|
Успешно компилируется, соединяется с сервером. Выводит пустую строку. Но дальше не знаю что делать,.. как вытащить страницу сайта,.. и как вообще зайти не по ip, а по имени домена. и пути до файла. Скажем http://www.site.ru/test.html | |
|
|
|