Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

04.09.2007, 18:32
|
|
Постоянный
Регистрация: 05.01.2007
Сообщений: 508
Провел на форуме: 2360904
Репутация:
1393
|
|
Сообщение от infernal-team
Exile1985 это вообще что такое? with IdSMTP1 do
Без обид, но порвало )
Учебник, тебе не помешал бы )
Последний раз редактировалось z01b; 04.09.2007 в 18:48..
|
|
|

05.09.2007, 22:04
|
|
Познающий
Регистрация: 06.08.2007
Сообщений: 36
Провел на форуме: 373639
Репутация:
10
|
|
Здравствуйте! Небольшая(а может очень большая) проблема, мне надо подключаться через Proxy сервер к smtp серверу при помощи компанента idsmtp. Подскажите как я могу это сделать?
|
|
|

06.09.2007, 19:25
|
|
Новичок
Регистрация: 06.09.2007
Сообщений: 8
Провел на форуме: 10073
Репутация:
0
|
|
Пытаюсь в своей программе получить HTML-код Web-страницы с помощью WinSock API, но программа элементарно виснет (если есть связь с Интернетом) я неправильно пользуюсь сокетами или HTTP-протоколом?
P.S. Antichat почему-то на месте многих пробелов ставит *
Код:
procedure Get;
var
k : integer;
* Servername : string;
* * FSocket* * : integer;
* * HostEnt* * : PHostEnt;
* * SockAddrIn : TSockAddrIn;
* * dSize* * * : dword;
* * Str* * * * : array [0..255] of Char;
* * WSAData* * : TWSAData;
begin
//...
* WSAStartup(257, WSAData);*
* * if Pos('http://', fUrl) = 0 then
* * * fUrl* *:= 'http://' + fUrl;
* Servername := AnsiReplaceStr(fUrl, 'http://', '');
* * FOR k := 1 TO length(Servername) DO
* * * if Servername[k] = '/' then
* * * * begin
* * * * * Servername := copy(Servername, 1, k - 1);
* * * * * break;
* * * * end;
* FSocket* * * * * * * * * * := socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
* SockAddrIn.sin_family* * * := AF_INET;
* SockAddrIn.sin_port* * * * := htons(80);
* SockAddrIn.sin_addr.s_addr := inet_addr(PAnsiChar(Servername));
* * if SockAddrIn.sin_addr.s_addr = INADDR_NONE then
* * * begin
* * * * HostEnt := gethostbyname(PAnsiChar(Servername));
* * * * * if HostEnt = nil then
* * * * * * begin
* * * * * * * closesocket(FSocket);
* * * * * * * Exit;
* * * * * * end;
* * * * SockAddrIn.sin_addr.s_addr := PLongint(HostEnt^.h_addr_list^)^;
* * * end;
* * if Connect(FSocket, SockAddrIn, SizeOf(SockAddrIn)) <> -1 then
* * * begin
* * * * lstrcpy(Str, PAnsiChar('GET ' + url + ' HTTP/1.1' + #13#10#0));
* * * * Str := '';
* * * * send(FSocket, Str, lstrlen(Str), 0);
* * * * * repeat
* * * * * * dSize := recv(FSocket, Str, 255, 0);
* * * * * * Code.AddString(Str);
//Code - аналог TStringList
* * * * * until
* * * * * * (dSize = 0) or (dSize = SOCKET_ERROR);
* * * * closesocket(FSocket);
* * * end;
* WSACleanup();
//...
end;
|
|
|

07.09.2007, 13:00
|
|
Участник форума
Регистрация: 09.02.2004
Сообщений: 122
Провел на форуме: 1089794
Репутация:
134
|
|
5p4x2kn3t > попробуй продебажить =)
Заметил только что здесь:
Код:
lstrcpy(Str, PAnsiChar('GET ' + url + ' HTTP/1.1' + #13#10#0));
не совсем правильно...
Надо:
Код:
lstrcpy(Str, PAnsiChar('GET ' + url + ' HTTP/1.1' + #13#10#13#10));
Последний раз редактировалось NetMan; 07.09.2007 в 13:02..
|
|
|

07.09.2007, 17:44
|
|
Новичок
Регистрация: 06.09.2007
Сообщений: 8
Провел на форуме: 10073
Репутация:
0
|
|
Сообщение от NetMan
5p4x2kn3t > попробуй продебажить =)
Заметил только что здесь:
Код:
lstrcpy(Str, PAnsiChar('GET ' + url + ' HTTP/1.1' + #13#10#0));
не совсем правильно...
Надо:
Код:
lstrcpy(Str, PAnsiChar('GET ' + url + ' HTTP/1.1' + #13#10#13#10));
Все равно не помогает.
Да, у меня в программе много потоков(TThread), использующих сокеты, инициализацию WSA нужно делать только в главной части
(еще перед созданием первого потока - каждый поток порождает новые) или в каждом?
Насчет запуска в debug-режиме - последняя остановка - на recv, дальше поток виснет, причем непонятно где, кажется в цикле repeat, но хз...
Последний раз редактировалось 5p4x2kn3t; 07.09.2007 в 17:48..
|
|
|

07.09.2007, 18:38
|
|
Banned
Регистрация: 03.08.2007
Сообщений: 313
Провел на форуме: 951141
Репутация:
291
|
|
|
|
|

07.09.2007, 18:53
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме: 1845671
Репутация:
1338
|
|
inv Дествительно жестоко
* * * * lstrcpy(Str, PAnsiChar('GET ' + url + ' HTTP/1.1' + #13#10#0));
* * * * Str := '';
* * * * send(FSocket, Str, lstrlen(Str), 0);
Получить строку, обнулить и послать!
|
|
|

07.09.2007, 21:26
|
|
Новичок
Регистрация: 06.09.2007
Сообщений: 8
Провел на форуме: 10073
Репутация:
0
|
|
Бли-и-и-и-ин =)) как это туда попало??!!)))) Спасибо.
Последний раз редактировалось 5p4x2kn3t; 07.09.2007 в 21:28..
|
|
|

09.09.2007, 08:53
|
|
Banned
Регистрация: 13.09.2006
Сообщений: 523
Провел на форуме: 2869410
Репутация:
925
|
|
Это кто знает как зделать на винапи в ListView,чтобы новые записи при добавлении добавлялись сверху вниз ? Или Снизу вверх?
|
|
|

09.09.2007, 16:53
|
|
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме: 1892597
Репутация:
836
|
|
PHP код:
//Определение колличества пунктов в ListBox
function ListBox_GetItemCount(hListBox: HWND): Integer;
begin
Result := SendMessage(hListBox, LB_GETCOUNT, 0, 0);
end;
//Удаление определенного пункта в ListBox
procedure ListBox_DeleteItem(hListBox: HWND; Index: Integer);
begin
SendMessage(hListBox, LB_DELETESTRING, Index, 0);
end;
//Удаление всех пунктов в ListBox
procedure ListBox_ClearItems(hListBox: HWND);
begin
SendMessage(hListBox, LB_RESETCONTENT, 0, 0);
end;
//Добавление пункта в ListBox
procedure ListBox_AddItem(hListBox: HWND; NewItem: String);
begin
SendMessage(hListBox, LB_ADDSTRING, 0, Integer(NewItem));
end;
//Добавление пункта в определенное место в ListBox
procedure ListBox_InsertItem(hListBox: HWND; Index: Integer; NewItem: String);
begin
SendMessage(hListBox, LB_INSERTSTRING, Index, Integer(NewItem));
end;
//Определение имени выделеного пункта в ListBox
function ListBox_GetSelectedItem(hListBox: HWND): string;
var
Index, len: Integer;
s: string;
buffer: PChar;
begin
Index := SendMessage(hListBox, LB_GETCURSEL, 0, 0);
len := SendMessage(hListBox, LB_GETTEXTLEN, wParam(Index), 0);
GetMem(buffer, len + 1);
SendMessage(hListBox, LB_GETTEXT, wParam(Index), lParam(buffer));
SetString(s, buffer, len);
FreeMem(buffer);
Result := s;
end;
//Определение номера выделеного пункта в ListBox
function ListBox_GetCountSelectedItem(hListBox: HWND): Integer;
var
Index, len: Integer;
s: string;
buffer: PChar;
begin
Index := SendMessage(hListBox, LB_GETCURSEL, 0, 0);
len := SendMessage(hListBox, LB_GETTEXTLEN, wParam(Index), 0);
GetMem(buffer, len + 1);
SendMessage(hListBox, LB_GETTEXT, wParam(Index), lParam(buffer));
SetString(s, buffer, len);
FreeMem(buffer);
Result := Index;
end;
//Определение имени пункта по номеру в ListBox
function ListBox_GetItem(hListBox: HWND; LbItem: Integer): string;
var
l: Integer;
buffer: PChar;
begin
l := SendMessage(hListBox, LB_GETTEXTLEN, LbItem, 0);
GetMem(buffer, l + 1);
SendMessage(hListBox, LB_GETTEXT, LbItem, Integer(buffer));
Result := StrPas(buffer);
FreeMem(buffer);
end;
//Выделение всех пунктов в ListBox
procedure ListBox_SelAllItems(hListBox: HWND);
var
CountItems, i: Integer;
begin
CountItems := SendMessage(hListBox, LB_GETCOUNT, 0, 0);
if CountItems = 0 then exit;
for i := 0 to CountItems do
SendMessage(hListBox, LB_SETSEL, Integer(true), i);
end;
//Выбор пункта
procedure ListBox_SelectedItem(hListBox: HWND; Index: Integer);
begin
SendMessage(hListBox, LB_SETCURSEL, Index, 0);
end;
(c) Lenin_Inc
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|