
29.08.2011, 17:13
|
 |
Let Me Show You
|
|
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
|
|
Код:
var
WSAData: TWSAData;
FSocket: TSocket;
FAddr: sockaddr_in;
InAddr: in_addr;
HostEnt: PHostEnt;
Buf: array [0..$ff] of Char;
Count: Integer;
begin
WSAStartup($0202, WSAData);
try
FSocket:=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if FSocket=INVALID_SOCKET then
raise Exception.Create('socket(): '+SysErrorMessage(WSAGetLastError));
FAddr.sin_family:=AF_INET;
FAddr.sin_port:=htons(25);
FillChar(InAddr, SizeOf(InAddr), 0);
HostEnt:=gethostbyname('smtp.mail.ru');
if HostEnt<>nil then
begin
InAddr.S_un_b.s_b1:=HostEnt^.h_addr^[0];
InAddr.S_un_b.s_b2:=HostEnt^.h_addr^[1];
InAddr.S_un_b.s_b3:=HostEnt^.h_addr^[2];
InAddr.S_un_b.s_b4:=HostEnt^.h_addr^[3];
FAddr.sin_addr:=InAddr;
end else raise Exception.Create('gethostbyname()');
if connect(FSocket, FAddr, SizeOf(FAddr))<>0 then
raise Exception.Create('connect(): '+SysErrorMessage(WSAGetLastError));
try
buf:='EHLO NumLock'#13#10;
Count:=14;
send(FSocket, Buf, Count, 0);
// подождем, чтобы одной командой recv все считать
Tag:=GetTickCount;
while GetTickCount-DWORD(Tag)<2000 do Application.ProcessMessages;
Count:=recv(FSocket, Buf, $100, 0);
if Count=SOCKET_ERROR then
raise Exception.Create('recv(): '+SysErrorMessage(WSAGetLastError));
Memo1.Lines.Add(Copy(Buf, 0, Count-1));
finally
closesocket(FSocket);
end;
finally
WSACleanup;
end;
end;
__________________
Пишу программы за еду.
__________________
|