Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2012, 09:57   #21
Thief_Brother
Пользователь
 
Регистрация: 26.02.2012
Сообщений: 22
По умолчанию

neat. давний знакомый меня учил этому.
Thief_Brother вне форума Ответить с цитированием
Старый 27.02.2012, 10:10   #22
Thief_Brother
Пользователь
 
Регистрация: 26.02.2012
Сообщений: 22
По умолчанию

так. ну смотря на ваше мсг. Начну нарушать правила и думаю зря.
Прошу, готовый код, да что бы зделали за меня, да я вот такой наглец. Раз вы мой код не можете понятЬ, прошу вот так вот нагло, как быдло готовый код, ох. Как же мне стыдно /facepalm
Thief_Brother вне форума Ответить с цитированием
Старый 27.02.2012, 10:18   #23
Thief_Brother
Пользователь
 
Регистрация: 26.02.2012
Сообщений: 22
По умолчанию

нет. таким образом работать безполезно, т.к готовое , это уже не весело. Не интересно, нехорошо.. Закрывайте тему, дабы ответов не вижу, только коменты какой я "нуб" и делаю всё криво. спасибо
Thief_Brother вне форума Ответить с цитированием
Старый 27.02.2012, 10:44   #24
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

работаю только в блокирующем режиме
пример на ини файлах
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp,WinSock,RTLConsts,StrUtils,inifiles;

type
  TForm1 = class(TForm)
    ServerSocket1: TServerSocket;
    procedure ServerSocket1GetThread(Sender: TObject;
      ClientSocket: TServerClientWinSocket;
      var SocketThread: TServerClientThread);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

const
  LF = #10; CR = #13;
  EOL = CR + LF;
  DefTimeout:Longint=60000;
  DefMaxLineLength:integer=MaxWord;
type
  TClientThread=class(TServerClientThread)
  private
    Name,Password:string;
  protected
    procedure ClientExecute; override;
  public
    function WaitForData(ATimeout: Longint): Boolean;
    function ReadLn(ATerminator:char=LF;AMaxLineLength:integer=MaxWord;ATimeOut:Longint=0):string;
    procedure WriteLn(const AOut:string='');

  end;


implementation

{$R *.dfm}

procedure TForm1.ServerSocket1GetThread(Sender: TObject;
  ClientSocket: TServerClientWinSocket;
  var SocketThread: TServerClientThread);
begin
  SocketThread:=TClientThread.Create(false,ClientSocket);
end;

function TClientThread.WaitForData(ATimeout: Longint): Boolean;
var
  FDSet: TFDSet;
  TimeVal: TTimeVal;
begin
  if ATimeout=-1 then ATimeout:=DefTimeout;
  TimeVal.tv_sec := ATimeout div 1000;
  TimeVal.tv_usec := (ATimeout mod 1000) * 1000;
  FD_ZERO(FDSet);
  FD_SET(ClientSocket.SocketHandle, FDSet);
  Result := select(0, @FDSet, nil, nil, @TimeVal) > 0;
end;

function TClientThread.ReadLn(ATerminator: char; AMaxLineLength, ATimeOut: Integer): string;
  procedure RaiseSocketError(ResultCode: Integer; const Op: string);
  begin
    raise ESocketError.CreateResFmt(@sWindowsSocketError,
        [SysErrorMessage(ResultCode), Result, Op]);
  end;
var
  Buf:array[byte] of char;
  SizeBuf:integer;
  r,i:integer;
  s:string;
begin
  if ATimeout=0 then ATimeout:=DefTimeout;
  SizeBuf:=SizeOf(Buf);
  result:='';
  while WaitForData(ATimeOut) do
  begin
    r:=recv(ClientSocket.SocketHandle, Buf, SizeBuf, MSG_PEEK);
    if r=0 then Break;
    if r=SOCKET_ERROR then RaiseSocketError(WSAGetLastError, 'recv');

    i:=PosEx(Buf,ATerminator,r);
    if i<>0 then r:=i;

    r:=recv(ClientSocket.SocketHandle, Buf, r, 0);
    if r=0 then Break;
    if r=SOCKET_ERROR then RaiseSocketError(WSAGetLastError, 'recv');

    SetString(s,Buf,r);
    result:=result+s;
    if i<>0 then Break;
  end;
  if length(result)=0 then exit;
  i:=length(result)-1;
  if (ATerminator=LF) and (result[i]=CR) then Dec(i);
  SetLength(result,i);
end;


procedure TClientThread.WriteLn(const AOut: string);
begin
  if Length(AOut)>0 then
    ClientSocket.SendBuf(PChar(AOut+EOL)^, Length(AOut)+SizeOf(EOL));
end;

procedure TClientThread.ClientExecute;
var
  S:string;
  ini:TIniFile;
begin
  Name:=Readln;
  Password:=Readln;
  ini:=TIniFile.Create('users.ini');
  try
    if ini.ReadString('USERS',Name,'')<>Password then exit;
  finally
    ini.Free;
  end;

  while (not Terminated) and ClientSocket.Connected do
  try
    s:=Readln;
    writeln(s);
  except
    Terminate;
    HandleException;
  end;
end;



end.
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 27.02.2012, 11:03   #25
Thief_Brother
Пользователь
 
Регистрация: 26.02.2012
Сообщений: 22
По умолчанию

ага. т.е если тут, получает 1 пакет, включается проверка логина и пароля , по окончанию таймера выводится типа "вывод" - да, разрешил (вошел)
нет(выход).
Хороший пример, спасибо.
Thief_Brother вне форума Ответить с цитированием
Старый 27.02.2012, 11:04   #26
Thief_Brother
Пользователь
 
Регистрация: 26.02.2012
Сообщений: 22
По умолчанию

буду вникать в код , еще раз спасибо
Thief_Brother вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с сокетами в php Detka.i.alex PHP 0 30.08.2010 17:15
Работа с сокетами(портами) groooovefree Софт 1 02.07.2010 09:53
Работа с сокетами zumm Работа с сетью в Delphi 10 28.03.2010 15:30
**Работа с сокетами** Яр|/||< (^_^) Работа с сетью в Delphi 4 11.07.2009 18:10
Работа с сокетами vasilii_terkin Работа с сетью в Delphi 2 13.02.2007 11:08