Код: Выделить всё
cout << x;
cout << "\n";
Код: Выделить всё
cout << x;
cout << "\n";
Эта технология называется создание исходящих сокетов.Garipov72 писал(а):Ну скажем PSS текст загрузить или html текст, или картинку с нета, да что угодно лиж бы оно потом в переменной в программе было. На сколько я помню надо порт открывать и т.д. только я забыл технологию.
Создание клиента
Программа клиента делается аналогично до момента создания сокетов. Cоздайте сокет так как описано выше, но не пользуйтесь командой bind:
Заполнение структуры производится почти также но нeжно указать теперь IP адрес сервера ( пример 127.0.0.1 ) .Дальше сразу можно соединятся:Код: Выделить всё
SOCKADDR_IN anAddr; anAddr.sin_family = AF_INET; anAddr.sin_port = htons(80); anAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
Для обращения программы-клиента к серверу с запросом на установление логической соединения используется системный вызов connect, имеющий следующий видКод: Выделить всё
connect(s, (struct sockaddr *)&anAddr, sizeof(struct sockaddr));
Аргумент s задает дескриптор socket'а, через который программа обращается к серверу с запросом на соединение. Socket должен быть предварительно создан системным вызовом socketи обеспечен адресом с помощью системного вызова bind.Код: Выделить всё
int connect (s, addr, addrlen) int s; struct sockaddr_in *addr; int addrlen;
Аргумент addr должен указывать на структуру данных, содержащую адрес, приписанный socket'у программы-сервера, к которой делается запрос на соединение. Для сетей TCP/IP такой структурой является sockaddr_in. Для формирования значений полей структуры sockaddr_in удобно использовать функцию gethostbyname.
Аргумент addrlen задает размер (в байтах) структуры данных, указываемой аргументом addr.
Для того, чтобы запрос на соединение был успешным, необходимо, по крайней мере, чтобы программа-сервер выполнила к этому моменту системный вызов listen для socket'а с указанным адресом.
При успешном выполнении запроса системный вызов connect возвращает 0, в противном случае - "-1" (устанавливая код причины неуспеха в глобальной переменной errno).
Примечание. Если к моменту выполнения connect используемый им socket не был привязан к адресу посредством bind ,то такая привязка будет выполнена автоматически.
Примечание. В режиме взаимодействия без установления соединения необходимости в выполнении системного вызова connect нет. Однако, его выполнение в таком режиме не является ошибкой - просто меняется смысл выполняемых при этом действий: устанавливается адрес "по умолчанию" для всех последующих посылок дейтаграмм.
Вот наконец установлена долгожданная связь c сервером( не забывайте проверять ошибки). Дальше воспользуемся функциями send и recv по своему усмотрению.
3. Приложение
Для получения адреса узла сети TCP/IP по его символическому имени используется библиотечная функция
Аргумент name задает адрес последовательности литер, образующих символическое имя узла сети.Код: Выделить всё
struct hostent *gethostbyname (name) char *name;
При успешном завершении функция возвращает указатель на структуру hostent, определенную в include-файле netdb.h и имеющую следующий вид
Поле h_name указывает на официальное (основное) имя узла.Код: Выделить всё
struct hostent { char *h_name; char **h_aliases; int h_addrtype; int h_lenght; char *h_addr; };
Поле h_aliases указывает на список дополнительных имен узла (синонимов), если они есть.
Поле h_addrtype содержит идентификатор используемого набора протоколов, для сетей TCP/IP это поле будет иметь значение AF_INET.
Поле h_lenght содержит длину адреса узла.
Поле h_addr указывает на область памяти, содержащую адрес узла в том виде, в котором его используют системные вызовы и функции socket-интерфейса.
Для "экстренного" закрытия связи с партнером (путем "сброса" еще не переданных данных) используется системный вызов shutdown, выполняемый перед close и имеющий следующий вид
Аргумент s задает дескриптор ранее созданного socket'а.Код: Выделить всё
int shutdown (s, how) int s; int how;
Аргумент how задает действия, выполняемые при очистке системных буферов socket'а:
* 0 - сбросить и далее не принимать данные для чтения из socket'а;
* 1 - сбросить и далее не отправлять данные для посылки через socket;
* 2 - сбросить все данные, передаваемые через socket в любом направлении.
Garipov72 писал(а):Мне достаточно его просто поместить в переменную (я имею ввиду текст html).
Потому как когда ты открываешь соединение на сервер HTTP то команда GET имеет как параметр имя файла и серверу всеравно какого типа этот файл ... он вернет блок данных в котором и будет тот файл который ты запрашивал ...Garipov72 писал(а): Хотя было бы интересно забрать файлы с инета.