Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 04.01.2013
Сообщений: 5
1

Получение данных с txt фаила на сервере

04.01.2013, 02:20. Показов 1305. Ответов 9
Метки нет (Все метки)

Добрый день. Пишу консольное приложение на С++, . Допустим есть http:..сайт/test.txt . Нужно с файла test.txt который находится на сайте, получить значения, допустим для переменной int a. И затем вывести результат на экран.

Как это сделать?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.01.2013, 02:20
Ответы с готовыми решениями:

Авторизация на сервере и получение данных
Всем привет)Прошу в меня камнями не кидать,я новичок,читаю гайды ,книги,но одному поднимать весь...

Чтение из фаила txt
Привет всем! помогите с чтением из фаила в фаиле записаны числа в два столбца как их считать в два...

Чтение из фаила txt
Привет всем. Решил написать прогу которая читает координаты из фаила и рисует график. Запарелся...

построчно записать данные из фаила txt в listBox
На сервере есть фаил, с содержанием: считаваю его в буффер: int URLgetpage(char *link,...

9
Модератор
3332 / 2116 / 343
Регистрация: 13.01.2012
Сообщений: 8,245
04.01.2013, 12:09 2
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
//------------------------------------------------------------------------------
#include <winsock>
#include <stdio.h>
//------------------------------------------------------------------------------
int get_addr(char *host_name)
{
    int res = -1;
 
    HOSTENT *phe = gethostbyname(host_name);
    if (phe)
        for (int i = 0; i < 4; i++)
            ((BYTE *)&res)[i] = phe->h_addr_list[0][i];
 
    return res;
}
//------------------------------------------------------------------------------
int main(int argc, char* argv[])
{
    WSADATA wsa_data;
    if (WSAStartup(0x101, &wsa_data))
    {
        printf("WSAStartup error (%i)\n", WSAGetLastError());
        system("pause");
        return -1;
    }
 
    if (wsa_data.wVersion != 0x101)
    {
        printf("Bad WSA version (%i)\n", wsa_data.wVersion);
        system("pause");
        return -1;
    }
 
    SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (s == INVALID_SOCKET)
    {
        printf("socket error (%i)\n", WSAGetLastError());
        system("pause");
        return -1;
    }
 
    int use_host_name;
    char host_name[256];
    char host_ip[256];
    int host_port;
    char doc[256];
 
    printf("use_host_name (0 for host_ip or 1 for host_name): ");
    scanf("%i", &use_host_name);
 
    if (use_host_name)
    {
        printf("host_name: ");
        scanf("%s", host_name);
    }
    else
    {
        printf("host_ip: ");
        scanf("%s", host_ip);
    }
 
    printf("host_port: ");
    scanf("%i", &host_port);
 
    printf("doc (for example /index.htm or /): ");
    scanf("%s", doc);
 
    SOCKADDR_IN sa;
    sa.sin_family = AF_INET;
    sa.sin_port = htons(host_port);
    sa.sin_addr.S_un.S_addr = use_host_name? get_addr(host_name) : inet_addr(host_ip);
 
    printf("wait for server...\n");
 
    while (true)
    {
        int connect_res = connect(s, (SOCKADDR *)&sa, sizeof(sa));
        if (!connect_res) break;
 
        Sleep(250);
    }
 
    printf("connected\n");
 
    char message[256];
 
    int message_size = sprintf
    (
        message,
        "GET [url]http://%s:%i%s[/url] HTTP/1.1\r\n"
        "Host: %s:%i\r\n"
        "Connection: Close\r\n"
        "\r\n",
        (use_host_name? host_name : host_ip),
        host_port,
        doc,
        (use_host_name? host_name : host_ip),
        host_port
    );
 
    if (send(s, message, message_size, 0) == SOCKET_ERROR)
    {
        printf("send error (%i)\n", WSAGetLastError());
        system("pause");
        return -1;
    }
 
    char buffer[100000];
    int buffer_size = sizeof(buffer);
    buffer_size = recv(s, buffer, buffer_size, 0);
    if (buffer_size == SOCKET_ERROR)
    {
        printf("recv error (%i)\n", WSAGetLastError());
        system("pause");
        return -1;
    }
    buffer[buffer_size] = '\0';
    printf("from_server: %s\n", buffer);
 
    closesocket(s);
 
    WSACleanup();
 
    system("pause");
    return 0;
}
Добавлено через 2 минуты
...только в строке квадратная скобка url квадратная скобка уберите - это форум дурной втыкает в текст проги свои плюшки
1
0 / 0 / 0
Регистрация: 04.01.2013
Сообщений: 5
04.01.2013, 18:47  [ТС] 3
ругается при компиляции
C++
1
2
3
4
5
6
7
8
9
10
11
1>данные с сайта.obj : error LNK2019: ссылка на неразрешенный внешний символ _gethostbyname@4 в функции "int __cdecl get_addr(char *)" (?get_addr@@YAHPAD@Z)
1>данные с сайта.obj : error LNK2019: ссылка на неразрешенный внешний символ _WSACleanup@0 в функции _main
1>данные с сайта.obj : error LNK2019: ссылка на неразрешенный внешний символ _closesocket@4 в функции _main
1>данные с сайта.obj : error LNK2019: ссылка на неразрешенный внешний символ _recv@16 в функции _main
1>данные с сайта.obj : error LNK2019: ссылка на неразрешенный внешний символ _send@16 в функции _main
1>данные с сайта.obj : error LNK2019: ссылка на неразрешенный внешний символ _connect@12 в функции _main
1>данные с сайта.obj : error LNK2019: ссылка на неразрешенный внешний символ _inet_addr@4 в функции _main
1>данные с сайта.obj : error LNK2019: ссылка на неразрешенный внешний символ _htons@4 в функции _main
1>данные с сайта.obj : error LNK2019: ссылка на неразрешенный внешний символ _socket@12 в функции _main
1>данные с сайта.obj : error LNK2019: ссылка на неразрешенный внешний символ _WSAGetLastError@0 в функции _main
1>данные с сайта.obj : error LNK2019: ссылка на неразрешенный внешний символ _WSAStartup@8 в функции _main
а нет проще способа? или только через сокеты?

Добавлено через 38 минут
проблему с компиляцией решил, нужно было подключить Wsock32.lib . Но не пойму как представленный выше код, поможет мне получить значения с txt файла на сайте.....нет чего то на подобии функции ifstream ? но не для локальных данных, а для сайта..?
0
Модератор
3332 / 2116 / 343
Регистрация: 13.01.2012
Сообщений: 8,245
04.01.2013, 21:51 4
что-то вроде
C++
1
2
3
std::stringstream ss;
ss.write(buffer, buffer_size);
ss >> xxx;
0
Заблокирован
05.01.2013, 11:55 5
ваш способ не подходит вот такая ошибка
1>main.cpp(20): fatal error C1083: Не удается открыть файл включение: winsock: No such file or directory

и можно пожалуйста готовый уже код? а то я тук тук в winnet

Добавлено через 15 минут
код который заносит данные из .txt файла на веб сервер в переменную int a;
0
Модератор
3332 / 2116 / 343
Регистрация: 13.01.2012
Сообщений: 8,245
05.01.2013, 14:00 6
все рабочее. как у вас может среда ругаться на winsock если первый раз у вас все компилировалось? вот еще раз готовый код.
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
//------------------------------------------------------------------------------
#include <winsock>
#include <stdio.h>
#include <sstream>
#include <fstream>
//------------------------------------------------------------------------------
int get_addr(char *host_name)
{
    int res = -1;
 
    HOSTENT *phe = gethostbyname(host_name);
    if (phe)
        for (int i = 0; i < 4; i++)
            ((BYTE *)&res)[i] = phe->h_addr_list[0][i];
 
    return res;
}
//------------------------------------------------------------------------------
int main(int argc, char* argv[])
{
    WSADATA wsa_data;
    if (WSAStartup(0x101, &wsa_data))
    {
        printf("WSAStartup error (%i)\n", WSAGetLastError());
        system("pause");
        return -1;
    }
 
    if (wsa_data.wVersion != 0x101)
    {
        printf("Bad WSA version (%i)\n", wsa_data.wVersion);
        system("pause");
        return -1;
    }
 
    SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (s == INVALID_SOCKET)
    {
        printf("socket error (%i)\n", WSAGetLastError());
        system("pause");
        return -1;
    }
 
    int use_host_name;
    char host_name[256];
    char host_ip[256];
    int host_port;
    char doc[256];
 
    printf("use_host_name (0 for host_ip or 1 for host_name): ");
    scanf("%i", &use_host_name);
 
    if (use_host_name)
    {
        printf("host_name: ");
        scanf("%s", host_name);
    }
    else
    {
        printf("host_ip: ");
        scanf("%s", host_ip);
    }
 
    printf("host_port: ");
    scanf("%i", &host_port);
 
    printf("doc (for example /index.htm or /): ");
    scanf("%s", doc);
 
    SOCKADDR_IN sa;
    sa.sin_family = AF_INET;
    sa.sin_port = htons(host_port);
    sa.sin_addr.S_un.S_addr = use_host_name? get_addr(host_name) : inet_addr(host_ip);
 
    printf("wait for server...\n");
 
    while (true)
    {
        int connect_res = connect(s, (SOCKADDR *)&sa, sizeof(sa));
        if (!connect_res) break;
 
        Sleep(250);
    }
 
    printf("connected\n");
 
    char message[256];
 
    int message_size = sprintf
    (
        message,
        "GET [url]http://%s:%i%s[/url] HTTP/1.1\r\n"
        "Host: %s:%i\r\n"
        "Connection: Close\r\n"
        "\r\n",
        (use_host_name? host_name : host_ip),
        host_port,
        doc,
        (use_host_name? host_name : host_ip),
        host_port
    );
 
    if (send(s, message, message_size, 0) == SOCKET_ERROR)
    {
        printf("send error (%i)\n", WSAGetLastError());
        system("pause");
        return -1;
    }
 
    char buffer[100000];
    int buffer_size = sizeof(buffer);
    buffer_size = recv(s, buffer, buffer_size, 0);
    if (buffer_size == SOCKET_ERROR)
    {
        printf("recv error (%i)\n", WSAGetLastError());
        system("pause");
        return -1;
    }
 
    std::stringstream ss;
    ss.write(buffer, buffer_size);
 
    while (true)
    {
        std::string line;
        std::getline(ss, line);
        if (line == "\r") break;
    }
 
    int a;
    ss >> a;
    printf("a=%i\n", a);
 
    closesocket(s);
 
    WSACleanup();
 
    system("pause");
    return 0;
}
запускаете. вводите IP или адрес. вводите порт. вводите путь к файлу. программа запрашивает этот файл, заносит ответ сервера в поток, считывает из потока a. вот как выглядит ответ:
----
HTTP/1.1 200 OK
Date: Sat, 05 Jan 2013 09:52:12 GMT
Server: Apache
Last-Modified: Sat, 05 Jan 2013 09:49:24 GMT
Accept-Ranges: bytes
Content-Length: 5
Connection: close
Content-Type: text/plain

123

----
очевидно заголовок вам не нужен - игнорируем все строки до тех пор пока не встретим пустую - сразу за ней пойдет собственно файл. считывайте начиная с этой позиции все что угодно.
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
данные из .txt файла на веб сервер
не понял. вы вроде другого хотели.
2
Миниатюры
Получение данных с txt фаила на сервере  
Заблокирован
05.01.2013, 15:02 7
да спасибо уже не надо я сделал
0
0 / 0 / 0
Регистрация: 04.01.2013
Сообщений: 5
05.01.2013, 23:46  [ТС] 8
попробую еще раз, надеюсь что получится...
0
Эксперт С++
8379 / 6115 / 613
Регистрация: 10.12.2010
Сообщений: 28,553
Записей в блоге: 30
07.01.2013, 23:40 9
C++
1
#pragma comment(lib, "ws2_32.lib")
???
0
19 / 18 / 1
Регистрация: 06.09.2012
Сообщений: 110
08.01.2013, 11:47 10
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
#pragma comment(lib, "ws2_32.lib")
???
Нет, это относиться к winsock2.
А у него winsock значит #pragma comment(lib, "wsock32")
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2013, 11:47

Получение данных с Com порта и сохранение их в txt
Доброго времени суток! Мне необходимо получить данные от устройства и сохранить их в txt файл....

Получение и использование данных из txt файла
Добрый вечер! Есть простой код: $txt = file('gorod.txt'); $str = $txt; unset($txt); echo...

Получение данных из .dat и сохранение в .txt
Существует бинарный файл с N вещественными числами (в начале файла стоит целое число N)....

Как сверить *.txt на компе с *.txt на сервере
Пожалуйста помогите как сделать следующее: Имеется 1 текстовый документ внутри которого написано...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.