Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/67: Рейтинг темы: голосов - 67, средняя оценка - 4.69
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683

Сокеты получение\отправка данных

01.10.2008, 16:10. Показов 14045. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, друг показал программку с использованием сокетов ну у меня и возникла одна идея как можно использовать такого рода программу. Порылся в интернете нашел немного статей. Вот что получилось
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#include <windows.h>
#include <ctype.h>
 
#define PORT 80
#define SERVERADDR "77.91.229.20"     // Адрес сервера
 
int main ( int argc, char* argv [ ] )
{
        WSADATA wd;
        char buff[10000];
        char buff2[10000]="GET /member.php\r\n HTTP/1.0 Host: [url]www.haddan.ru\r\n[/url] Connection: Closed\r\n";
        printf ( "TCP Client \n" ); // ну, тут и так понятно
        if ( WSAStartup ( 0x202, &wd ) )
        {
                printf ( " WSAStart error  %d \n ", WSAGetLastError ( ) );
                return -1;
        }
 
        SOCKET sock ;
        sock=socket ( AF_INET, SOCK_STREAM, 0 );
        if  ( sock < 0 )
        {
            printf (" Socket ( ) error    %d \n ", WSAGetLastError ( ) );
            return  -1;
        }
 
        sockaddr_in  dest_addr;
        dest_addr.sin_family=AF_INET; //инет коннектинг
        dest_addr.sin_port=htons ( PORT ); //порт
        HOSTENT    *hst;  // хост
        if( inet_addr(SERVERADDR) != INADDR_NONE )     
            dest_addr.sin_addr.S_un.S_addr = inet_addr(SERVERADDR);
        else if( hst=gethostbyname ( SERVERADDR ) )    
            ( ( unsigned long   * ) &dest_addr.sin_addr )[0]=((unsigned long** )hst->h_addr_list)[0][0];
        else
        {
               printf( "invalid address  %s \n", SERVERADDR );
               closesocket( sock ) ;
               WSACleanup();
               return  -1;
        }
 
        if(connect( sock, (sockaddr *)&dest_addr, sizeof(dest_addr) ))
        {
               printf (" Connect error  %d \n ", WSAGetLastError ( ) );
               return -1;
        }
 
        //sprintf( buff2, "GET /room/func/mine.php HTTP/1.1\r\nHost: haddan.ru\r\nConnection: Close\r\n\r\n");
        send( sock, buff2, sizeof(buff2), 0);
        recv( sock, buff, sizeof(buff)-1, 0 );
        //for(int i=0; i < strlen(buff); i++)
        //  if(isalnum(buff[i]) || buff[i] == '<'|| buff[i] == '>' || buff[i] == '/')
                printf("%s",buff );
        //  else
        //      continue;
            printf("\n");
        printf ("Connection with %s succesfully. quit - quit" , SERVERADDR );
        //int nsize;
        /*while( ( nsize = recv( sock, buff, sizeof(buff)-1, 0 ) ) != SOCKET_ERROR )
        {
                buff[ nsize ] =0;
                printf ( " S=>C: %s ", buff  ) ;
                printf ( "S<=C: " ) ;
                fgets ( &buff [0], sizeof( buff )-1, stdin );
                if  ( !strcmp ( &buff[0], "quit\n" ) )
                {
                        printf ( " Exit " );
                        closesocket ( sock ) ; //выход правильный
                        WSACleanup() ;
                        return 0;
                }
                send ( sock, &buff [ 0 ], nsize, 0 ) ;
         }*/
 
         //printf ( " Recv error  %d \n", WSAGetLastError ( )  );
         //closesocket ( sock ) ;
         //WSACleanup ( ) ;
         return 0;
}
Но это более поздняя версия, если это можно так назвать.
Меня интерисует эта строка
C++
1
char buff2[10000]="GET /member.php\r\n HTTP/1.0 Host: [url]www.haddan.ru\r\n[/url] Connection: Closed\r\n"
;Какой именно формат она должна иметь? Почему именно такой?
Я установил анализатор траффика, чтобы понять куда отправляет и что отправляет броузер.
К примеру одно из данных
GET /main.php HTTP/1.0
Host: www.haddan.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.13) Gecko/20080311 AdCentriaIM/1.7 Firefox/2.0.0.13
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.haddan.ru/
Cookie: PHPSESSID=vjeo0c6s1l59jo7jo1klt6svc6
Помоему напоминает немного формат той строки?! Ну не считая недостающих строк.
В общем может у кого-то есть информация, где я могу прочитать по продробнее, а так же насчет POST поскольку меня интересует, как отослать данные на ту страничку.
На данный момент этот код возвращает в recv код странички. Не пойму зачем мне код странички?)
Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.10.2008, 16:10
Ответы с готовыми решениями:

Сокеты. Отправка данных
Осваиваю работу с сокетами по этому пособию http://www.firststeps.ru/mfc/net/socket Возникла проблема, с отправкой данных! Суть такая:...

Сокеты: отправка данных именно тому клиенту, который сделал запрос
Здравствуйте ! Требуется помощь опытных ! Пишу сервер для игры на WinSock c++ (VisualStudio) ! Сервер уже конектится с игрой и принимает...

Отправка и получение данных через RS-485
Помогите кто чем сможет. Надо отправить 2 командных пакетов из 7-ми байтов. Пауза между командными пакетами не менее 3-х мс. Пауза между...

6
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
01.10.2008, 16:27
читай стандарт протокола HTTP, там все написано
0
 Аватар для ABTOP
36 / 36 / 4
Регистрация: 09.06.2008
Сообщений: 324
01.10.2008, 17:21
Вот http://e-code.tnt43.com/archives/52#part_1_2 читай, это про стандарт HTTP/1.0
0
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
02.10.2008, 01:43  [ТС]
Та прочитал уже... Но немогу понять, как послать данные на сервер введенные через POST с сокета. Там может и написано неплохо, но нужны конкретные примеры. Может кто подскажет как?!
Вот сайт
www.haddan.ru
на главное страничке вводятся данные после чего через HTTP Analyzer я похимичил посмотрел, что и куда и в общем данные заполняются так
https://www.haddan.ru/main.php... asswd=PASS
Тоесть вот так я и посылаю.
Но в итоге получаю код странички которая открывается когда я пытаюсь зайти к примеру в опции персонажа после того, как закрыл\открыл броузер - "Ошибка, свзяь потеряна, залогинтесь снова". Это я получаю когда посылаю запрос через Сокет или HTTP Analyzer есть утилита Reques Builder. И так и так один и тот же результат.
Но если я ввожу эту строку в Броузере https://www.haddan.ru/main.php... asswd=PASS
то у меня открывается другое окно, а именно если через ИЕ, то логинется, если через Мозиллу, то просит зайти в ИЕ для входа в игру. Тоесть в любом случае Построитель запросов и запрос через Сокет возвращают, что-то не то.
Подскажите, как правильно послать запрос и что конкретно и где писать в запросе для успешной авторизации(попытки аторизации).
0
 Аватар для ABTOP
36 / 36 / 4
Регистрация: 09.06.2008
Сообщений: 324
02.10.2008, 11:47
ты обращаешся к main.php, а попробуй к member.php
0
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
02.10.2008, 19:54  [ТС]
Блин... Переделал запрос, но результат пплачевный.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#include <windows.h>
#include <ctype.h>
 
#define PORT 80         //  Порт, через который идет подключение к серверу....21,80,25,110 и т.п.
#define SERVERADDR "77.91.229.20"     // Адрес сервера
 
int main ( int argc, char* argv [ ] )
{
     WSADATA wd;
     char buff[10000];
     char buff2[9000]= {
"POST /member.php HTTP/1.0\r\n"
"Host: www.haddan.ru\r\n"
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.13) Gecko/20080311 AdCentriaIM/1.7 Firefox/2.0.0.13\r\n"
"Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n"
"Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\n"
"Accept-Encoding: gzip,deflate\r\n"
"Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n"
"Keep-Alive: 300\r\n"
"Connection: keep-alive\r\n"
"Referer: http://www.haddan.ru/\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: 33\r\n\r\n"
"username=USER&passwd=PASS"
     };
 
     printf ( "TCP Client \n" ); // ну, тут и так понятно
     if ( WSAStartup ( 0x202, &wd ) )
     {
             printf ( " WSAStart error  %d \n ", WSAGetLastError ( ) );
             return -1;
     }
 
     SOCKET sock ;
     sock=socket ( AF_INET, SOCK_STREAM, 0 );
     if  ( sock < 0 )
     {
         printf (" Socket ( ) error    %d \n ", WSAGetLastError ( ) );
         return  -1;
     }
 
     sockaddr_in  dest_addr;
     dest_addr.sin_family=AF_INET; //инет коннектинг
     dest_addr.sin_port=htons ( PORT ); //порт
     HOSTENT    *hst;  // хост
     if( inet_addr(SERVERADDR) != INADDR_NONE )     
         dest_addr.sin_addr.S_un.S_addr = inet_addr(SERVERADDR);
     else if( hst=gethostbyname ( SERVERADDR ) )    
         ( ( unsigned long   * ) &dest_addr.sin_addr )[0]=((unsigned long** )hst->h_addr_list)[0][0];
     else
     {
            printf( "invalid address  %s \n", SERVERADDR );
            closesocket( sock ) ;
            WSACleanup();
            return  -1;
     }
 
     if(connect( sock, (sockaddr *)&dest_addr, sizeof(dest_addr) ))
     {
            printf (" Connect error  %d \n ", WSAGetLastError ( ) );
            return -1;
     }
 
     //sprintf( buff2, "GET /room/func/mine.php HTTP/1.1\r\nHost: haddan.ru\r\nConnection: Close\r\n\r\n");
     send( sock, buff2, sizeof(buff2), 0);
     recv( sock, buff, sizeof(buff)-1, 0 );
     //for(int i=0; i < strlen(buff); i++)
     //    if(isalnum(buff[i]) || buff[i] == '<'|| buff[i] == '>' || buff[i] == '/')
             printf("%s",buff );
     //    else
     //        continue;
         printf("\n");
     printf ("Connection with %s succesfully. quit - quit" , SERVERADDR );
     //int nsize;
     /*while( ( nsize = recv( sock, buff, sizeof(buff)-1, 0 ) ) != SOCKET_ERROR )
     {
             buff[ nsize ] =0;
             printf ( " S=>C: %s ", buff  ) ;
             printf ( "S<=C: " ) ;
             fgets ( &buff [0], sizeof( buff )-1, stdin );
             if  ( !strcmp ( &buff[0], "quit\n" ) )
             {
                     printf ( " Exit " );
                     closesocket ( sock ) ; //выход правильный
                     WSACleanup() ;
                     return 0;
             }
             send ( sock, &buff [ 0 ], nsize, 0 ) ;
      }*/
 
      //printf ( " Recv error  %d \n", WSAGetLastError ( )  );
      //closesocket ( sock ) ;
      //WSACleanup ( ) ;
      return 0;
}
Такой запрос срабатывает когда данные успешно отправлены(попас через Анализатор), но когда запускаю код получаю
TCP Client
HTTP/1.1 302 Found
Date: Thu, 02 Oct 2008 15:40:08 GMT
Server: Apache/2.0.58 (Unix) PHP/5.1.4
X-Powered-By: PHP/5.1.4
Set-Cookie: PHPSESSID=ct419tcu690bp9hmvq2b4dnt95; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
location: /main.php
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Length: 26
Keep-Alive: timeout=3, max=250
Connection: Keep-Alive
Content-Type: text/html; charset=windows-1251

▼Л
Connection with 77.91.229.20 succesfully. quit - quitPress any key to continue
и в Анализаторе
‹ xњ яя HTTP/1.1 414 Request-URI Too Large
Date: Thu, 02 Oct 2008 15:41:59 GMT
Server: Apache/2.0.58 (Unix) PHP/5.1.4
Content-Length: 333
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>414 Request-URI Too Large</title>
</head><bоdу>
<h1>Request-URI Too Large</h1>
<p>The requested URL's length exceeds the capacity
limit for this server.<br />
</p>
<hr>
<address>Apache/2.0.58 (Unix) PHP/5.1.4 Server at haddan.ru Port 80</address>
</bоdу>
0
 Аватар для mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
23.01.2009, 01:23
Вся проблема с этим: "Accept-Encoding: gzip,deflate\r\n"
Тебе сервер и выдает данные в сжатом виде
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.01.2009, 01:23
Помогаю со студенческими работами здесь

ICQ отправка сообщений через сокеты
Ищу пример логина на сервер ICQ и отправки сообщений через сокеты. Где можно посмотреть реализацию или хотя бы найти описание протокола?...

Отправка HTML письма через сокеты
В прошлом реализовал отправку самого простого письма на E-mail Сейчас решил визуально приукрасить это дело. Как сделать так, чтобы письмо...

Получение исходного кода UTF-8 страницы через сокеты и вывод на консоль
Всем привет! Столкнулся с такой проблемой. Мне нужно получить html код страницы, которая находится в интернете, и вывести его на консоль....

Отправка http запроса и получение ответа
я понимаю что есть дофига тем про это, я честно гуглила и искала, но находила в основном код без пояснений с непонятными мне функциями,...

Ошибка передачи данных - сокеты
Проблема состоит в следующем: работаю с сокетами, пытаюсь передать три строки от клиента к серверу по протоколу TCP. Привожу кусок кода из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru