Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

переделать консольное прил-е в Gui

1.3K
29 ноября 2005 года
Zephyr
104 / / 03.05.2005
Есть пример консольной проги взятый с codenet.ru.

socket.cpp
#include "stdio.h";
#include "socket.h";
#include "config.h";

static char Rec[2048000];

bool SendString(SOCKET s,char* str) {
int cnt=send(s,str,strlen(str),0);
if (cnt==SOCKET_ERROR) return(false); else return(true);
}

char* GetString(SOCKET s) {
char *str;
char InBuff[2048];
int cnt;

strcpy("",Rec);
while (cnt!=0) {
memset(&InBuff,0,2048);
cnt=recv (s, (char*)&InBuff, sizeof(InBuff),0);
strcat(Rec,InBuff);
}
return((char*)&Rec);
}


int OpenURL(char *url) {
char *none="";
char query[2048];
struct sockaddr_in ssin;
struct hostent* hp;
unsigned char strHlp[2048], *pch;
int PortNum;
char *http_host;
char *http_path;

if (memcmp(url,"HTTP://",7)!=0 && memcmp(url,"http://",7)!=0) return(7);
url+=7;
if (WSAStartup(MAKEWORD(1,1),&lpWSAData)!=0) return(1);
// используем Default'овый номер порта - 80, если не задан другой
strcpy(strHlp,url);
pch = strchr((char*)strHlp,':');
if (pch==NULL) {
PortNum = 80;
pch = strchr((char*)strHlp,'/');
if (pch!=NULL) {
pch[0] = '\0';
http_path=pch+1;
}
else {
http_path=none;
}
}
else {
pch[0] = '\0';
pch++;
char *pch1 = strchr((char*)pch,'/');
if (pch1!=NULL) {
pch1[0] = '\0';
http_path=pch1+1;
}
else {
http_path=none;
}
PortNum = atoi(pch);
if(PortNum==0) PortNum = 80;
}

// Поучаем IP по имени
if ((hp=gethostbyname(strHlp))==NULL) return(1);
http_host=strHlp;

memset ((char *)&ssin, 0, sizeof(ssin));
ssin.sin_family = AF_INET;
ssin.sin_addr.s_addr = htonl(INADDR_ANY);
ssin.sin_port = 0;
bind (s, (struct sockaddr *)&ssin, sizeof(ssin));

s=socket(AF_INET, SOCK_STREAM, 0);
if (s==INVALID_SOCKET) return(4);

ssin.sin_family = AF_INET;
ssin.sin_addr.S_un.S_un_b.s_b1 = hp->h_addr[0];
ssin.sin_addr.S_un.S_un_b.s_b2 = hp->h_addr[1];
ssin.sin_addr.S_un.S_un_b.s_b3 = hp->h_addr[2];
ssin.sin_addr.S_un.S_un_b.s_b4 = hp->h_addr[3];
ssin.sin_port = htons(PortNum);

printf("Conecting to %d.%d.%d.%d...",
(unsigned char)hp->h_addr[0],
(unsigned char)hp->h_addr[1],
(unsigned char)hp->h_addr[2],
(unsigned char)hp->h_addr[3]);
if (connect(s, (sockaddr *)&ssin, sizeof(ssin))==-1) return(3);
printf("Ok\n");

strcpy(query,"GET /");
strcat(query,http_path);
strcat(query," HTTP/1.0\nHost: ");
strcat(query,http_host);
strcat(query,"\nUser-agent: ");
strcat(query,http_user_agent);
strcat(query,"\nAccept: */*\n\n");

printf("%s",query);

if (!SendString(s,query)) return(5);
char* str=GetString(s);
printf("%s",str);
return(0);
}

void CloseURL(void) {
WSACleanup();
}

void main(void) {
int err=OpenURL("http://www.codenet.ru/");
if (err!=0) {
printf("Error #%d: WSABASEERR+%d\n",err,
WSAGetLastError()-WSABASEERR);
}
}

config.h
Этот модуль содержит настройки...точнее одну настройку - то что сервер получит в качестве HTTP_USER_AGENT.

char *http_user_agent="Search Engine";

socket.h
#include <windows.h>

int s;
WSADATA lpWSAData;





Как мне переделать его в GUI версию, чтобы все результаты выводились не на экран, а на поле Memo?
830
30 ноября 2005 года
MVal
76 / / 17.10.2002
Цитата:
Originally posted by Zephyr
Как мне переделать его в GUI версию, чтобы все результаты выводились не на экран, а на поле Memo?


А что тут сложного?
Вместо printf'ов пиши Memo->Lines->Add(...);

1.9K
30 ноября 2005 года
Anton Chik
175 / / 26.09.2005
...а содержимое main() соответственно перекинуть в FormCreate, например :)
1.3K
30 ноября 2005 года
Zephyr
104 / / 03.05.2005
[QUOTE]Originally posted by Anton Chik
...а содержимое main() соответственно перекинуть в FormCreate, например :) [/QUOT

Но когда я так делаю, у меня возникает ошибка в Socket.h. Почему???
1.9K
30 ноября 2005 года
Anton Chik
175 / / 26.09.2005
ну попробуй кинуть содержимое в какую-нибудь кнопочку на форме...
1.3K
30 ноября 2005 года
Zephyr
104 / / 03.05.2005
Цитата:
Originally posted by Anton Chik
ну попробуй кинуть содержимое в какую-нибудь кнопочку на форме...



Я именно так и делаю...
Выдаются такие ошибки:

[C++ Error] socket.h(4): E2141 Declaration syntax error
[C++ Error] Unit1.cpp(28): E2147 'SOCKET' cannot start a parameter declaration
[C++ Error] Unit1.cpp(28): E2141 Declaration syntax error
[C++ Error] Unit1.cpp(145): E2139 Declaration missing ;
[C++ Warning] Unit1.cpp(145): W8004 'Rec' is assigned a value that is never used
[C++ Error] Unit1.cpp(145): E2190 Unexpected }

830
01 декабря 2005 года
MVal
76 / / 17.10.2002
А тебе вообще сильно нужен этот сокет?
Индийцы не подайдут? Я тут их недавно поюзал - вполне доволен. Просто. Быстро. И почти без багов.
Хотя, конечно, мое дело предложить...
1.9K
01 декабря 2005 года
Anton Chik
175 / / 26.09.2005
насколько я понял из этих ошибок - все это косяк в синтаксисе...приведи код как ты переделал main и еще желательно строки 2139-2141,2147 ,охота взглянуть...
1.3K
01 декабря 2005 года
Zephyr
104 / / 03.05.2005
Цитата:
Originally posted by Anton Chik
насколько я понял из этих ошибок - все это косяк в синтаксисе...приведи код как ты переделал main и еще желательно строки 2139-2141,2147 ,охота взглянуть...




Да ничё я не переделывал... Тока принтфы заменил на Мемо->Адд и всё.

585
02 декабря 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by Zephyr
Да ничё я не переделывал... Тока принтфы заменил на Мемо->Адд и всё.


Да брось! В ошибках - чистый синтаксис

1.3K
04 декабря 2005 года
Zephyr
104 / / 03.05.2005
Цитата:
Originally posted by honeybeer
Да брось! В ошибках - чистый синтаксис


Ошибки вылаются в Socket.h

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог