Страница: 1 | 2 |
Вопрос: Первая рабочая версия VBNet.RU Offline Client!
Добавлено: 01.04.05 15:28
Автор вопроса: Sharp | Web-сайт:
Свершилось! Увидела свет первая рабочая версия VBNet.RU Offline Client моего авторства! Сегодня, в 15:13, была скомпилирована первая полностью рабочая версия долгожданного клиента, который позволит скачивать с форума только новые посты и просматривать их локально, что создает намного большее удобство при работе с форумом и значительно (в 4-5 раз) экономит траффик. Программа представляет собой HTTP-сервер на 1234-м порту, предоставляющий через броузер удобный гипертекстовый интерфейс для чтения форума и добавления сообщений. Для тестирования (версия сырая, но очевидных багов нету) скачайте и распакуйте следующий архив - http://regsetup.narod.ru/svbnrufoc.rar (32КБ), после чего запустите файл svbnrufoc.exe (от Sharp VBNet.RU Forum Offline Client), ваш любимый броузер (тестировалось под Avant Browser и Internet Explorer) и наберите в адресной строке "http://127.0.0.1:1234/" (без кавычек) и перед вами появятся дальнейшие инструкции по работе с программой.
Тем не менее, это ни в коей мере не сигнал sne и Ко прекращать работу, поскольку программа написана на Microsoft Visual C++, и не все форумчане смогут понять исходники (если кому нужны, выложу в ближайшее время, после приведения к читабельному виду :))
Возможно, эта программа, пока не готов клиент от sne, останется единственной возможностью читать форум vbnet.ru
Ответы
Всего ответов: 22
Номер ответа: 1
Автор ответа:
Pashenko
ICQ: 176176951
Вопросов: 14
Ответов: 655
Профиль | | #1
Добавлено: 01.04.05 15:50
Круто!
Всем качать!!!
Номер ответа: 2
Автор ответа:
freeloader
ICQ: 50804884
Вопросов: 72
Ответов: 642
Web-сайт:
Профиль | | #2
Добавлено: 01.04.05 15:51
Хм а ведь она не запускается, точнее запускается и в памяти висит, больше ничего.
WinXPPro, SP2
Номер ответа: 3
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #3
Добавлено: 01.04.05 16:05
freeloader, еще раз:
1. Cкачайте и распакуйте следующий архив - http://regsetup.narod.ru/svbnrufoc.rar (32КБ)
2. Запустите файл svbnrufoc.exe
3. Запустите ваш любимый броузер
4. Наберите в адресной строке "http://127.0.0.1:1234/" (без кавычек)
5. Перед вами появятся дальнейшие инструкции по работе с программой.
Номер ответа: 4
Автор ответа:
freeloader
ICQ: 50804884
Вопросов: 72
Ответов: 642
Web-сайт:
Профиль | | #4
Добавлено: 01.04.05 16:11
А нуда заработала, классная прога, вот уже ответ с помощью нее пишу
Номер ответа: 5
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #5
Добавлено: 01.04.05 16:15
Шутник
Номер ответа: 6
Автор ответа:
gvozd
Разработчик Offline Client
Вопросов: 164
Ответов: 1317
Web-сайт:
Профиль | | #6
Добавлено: 01.04.05 16:50
Что-то меня первое апреля в этом году раздражает.
Номер ответа: 7
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #7
Добавлено: 01.04.05 18:54
Когда читал топик, сразу не верилось, что это правда, т.к. 32K на VС++ и одним файлов это более чем маловато (я сравниваю с тем, что ваяется в vbnet). А мысля классная - работать в собственном web-браузере с форумом через localhost.
Номер ответа: 8
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #8
Добавлено: 02.04.05 07:34
Шутник блин )
Номер ответа: 9
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #9
Добавлено: 02.04.05 09:14
Номер ответа: 10
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #10
Добавлено: 02.04.05 15:48
debug 32 кб? невозможно...
Номер ответа: 11
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #11
Добавлено: 02.04.05 20:07
Не думал, что что-то в этом топике меня больше может разозлить, чем второй ответ, но ты, DaSharm, бесспорно, талант. Написано же - RAR-архив размером 32 КБ. Разве несжатые проограммы, помещенные в архив, не становятся меньше?
Номер ответа: 12
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #12
Добавлено: 02.04.05 21:17
Ещё показалось подозрительным 1234 порт )) не попрограмерски как то... первая моя мысль: "не знаю, может настраивается"
Номер ответа: 13
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #13
Добавлено: 02.04.05 21:53
ты слепой?Я нет, я читал твой же QUOTE, где mc-black не говорил об архиве, а о файле. Не смотрел свойства файла этого сервера, уровня детского садика, времени не было. но я бы не удивился, если бы ты сначала UPX'ом сжал до 33 кб, а потом заархивил до 32 кб RAR'ом, всеравно ты бы птом ещё на 3 страницы доказывал, что ты прав...
Номер ответа: 14
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #14
Добавлено: 02.04.05 23:14
приложение весит 124 кб.
2Sharp: не кинешь исходник?
Номер ответа: 15
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #15
Добавлено: 02.04.05 23:56
#include <winsock.h>
#include <windows.h>
#define PROJ_NAME "vbnrufoc"
#pragma comment (lib, "wsock32.lib"
int nclients = 0;
const SOCKET_VERSION = 0x101;
void WINAPI ThreadProc(LPVOID client_socket);
class HTTP{
public:
HTTP(){
WSADATA wsaData;
WSAStartup(SOCKET_VERSION, &wsaData);
}
~HTTP(){
WSACleanup();
}
void StartServer(int Port, DWORD WINAPI pFunc(LPVOID my_sock)){
SOCKET my_sock;
my_sock = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in local_addr;
local_addr.sin_family = AF_INET;
local_addr.sin_port = htons(Port);
local_addr.sin_addr.s_addr = 0;
if(!bind(my_sock, (sockaddr *)&local_addr, sizeof(local_addr))){
listen(my_sock, 0x100);
SOCKET client_socket;
sockaddr_in client_addr;
int client_addr_size = sizeof(client_addr);
while((client_socket = accept(my_sock, (sockaddr *)&client_addr, &client_addr_size))){
DWORD thID;
CreateThread(NULL, NULL, pFunc, &client_socket, NULL, &thID);
}
}
closesocket(my_sock);
}
char *GetRequest(LPVOID client_socket, char *Request, unsigned long lRequest){
SOCKET my_sock;
my_sock=((SOCKET *) client_socket)[0];
unsigned long all_bytes = 0;
unsigned long bytes_recv = 0;
while(bytes_recv != SOCKET_ERROR && all_bytes < lRequest){
bytes_recv = recv(my_sock, &Request[all_bytes], lRequest - all_bytes, 0);
all_bytes += bytes_recv;
if((all_bytes >= 4 && (Request[all_bytes-1] == 10 && Request[all_bytes-2] == 13 && Request[all_bytes-3] == 10 && Request[all_bytes-4] == 13)) || all_bytes == lRequest) break;
}
Request[all_bytes+1] = 0;
return Request;
closesocket(my_sock);
}
void SendResponse(LPVOID client_socket, char *Response, unsigned long lResponse){
SOCKET my_sock;
my_sock=((SOCKET *) client_socket)[0];
send(my_sock, Response, lResponse, 0);
closesocket(my_sock);
}
};
char *transform(char *str){
for(int i=0; str[i]; i++) str[i] ^= 0x80;
return str;
}
DWORD WINAPI ClientProc(LPVOID client_socket){
char Request[10240];
unsigned long lRequest = sizeof(Request);
//char Response[10240] = "HTTP/1.1 200 OK\nAccept-Ranges: bytes\nContent-Length: 647\nContent-Type: text/html; charset=WINDOWS-1251\n\n<html><head><title>С первым апреля!</title></head><body>\n<h1>С первым апреля!</h1><hr>\nНа первое апреля выполнен следующий объем работ:\n<ol>\n<li>Написан код перевода XML в БД программы\n<li>Написан код HTTP-сервера (его скомпилированную часть вы лицезреете)\n<li>Написан объект, реализующий удобную работу с БД\n<li>Создана БД форума vbnet.ru, содержащая свыше 67000 постов\n</ol>\nОсталось:\n<ol>\n<li>Объединить HTTP-сервер и работу с БД в одной программе\n<li>Написать код получения данных с сервера vbnet.ru\n<li>Написать код преобразования данных из БД в HTML-вывод имитатора форума\n<li>Протестировать всю программу\n</ol><a href="http://127.0.0.1:1234/iwanttoexit">Завершить программу</a></body><html>\n";
char Response[10240] = "ИФФРЇ±®± І°° ПЛЌЉБггерфТбозеує вщфеуЌЉГпофеофМеозфиє ·±¶ЌЉГпофеофФщреє фешфЇифнм» гибтуефЅЧЙОДПЧУ±Іµ±ЌЉЌЉјифнмѕјиебдѕјфйфмеѕQ oepb{l `opekЎјЇфйфмеѕјЇиебдѕјвпдщѕЌЉји±ѕQ oepb{l `opekЎјЇи±ѕјитѕЌЉM` oepbne `opek b{onkmem qkeds~yhi nazel p`anrєЌЉјпмѕЌЉјмйѕM`ohq`m jnd oepebnd` ШНМ b AD opncp`ll{ЌЉјмйѕM`ohq`m jnd ИФФРqepbep` Ёecn qjnlohkhpnb`mms~ w`qr| b{ khvegpeere©ЌЉјмйѕM`ohq`m nazejr¬ pe`khgs~yhi sdnams~ p`anrs q ADЌЉјмйѕQngd`m` AD tnpsl` цвоеф®тх¬ qndepf`y` qb{xe ¶·°°° onqrnbЌЉјЇпмѕЌЉNqr`knq|єЌЉјпмѕЌЉјмйѕNazedhmhr| ИФФРqepbep h p`anrs q AD b ndmni opncp`lleЌЉјмйѕM`ohq`r| jnd onkswemh d`mm{u q qepbep` цвоеф®тхЌЉјмйѕM`ohq`r| jnd openap`gnb`mh d`mm{u hg AD b ИФНМb{bnd hlhr`rnp` tnpsl`ЌЉјмйѕOpnreqrhpnb`r| bq~ opncp`llsЌЉјЇпмѕЌЉјб итежЅўиффрєЇЇ±І·®°®°®±є±ІіґЇйчбоффпешйфўѕG`bepxhr| opncp`llsјЇбѕЌЉјЇвпдщѕјифнмѕ";
unsigned long lResponse = sizeof(Response);
HTTP MyHTTP;
MyHTTP.GetRequest(client_socket, Request, lRequest);
if(strstr(Request, "iwanttoexit" != NULL) ExitProcess(0);
//MessageBox(0, transform(Response), "test", MB_ICONASTERISK);
MyHTTP.SendResponse(client_socket, transform(Response), strlen(Response));
return 0;
}
int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow){
HTTP MyHTTPServer;
MyHTTPServer.StartServer(1234, (&ClientProc));
return 0;
}