Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];

Вниз

ClientSocket   Найти похожие ветки 

 
Profik ©   (2005-07-22 15:32) [0]

Нада простенький пример пересылки стринги через сокеты


 
Digitman ©   (2005-07-22 15:37) [1]

он у тебя перед носом - в каталоге с демо-проектами в составе Делфи-поставки


 
Wm.DIGGER ©   (2005-07-22 15:38) [2]

Пример сервера:


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ScktComp, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   ServerSocket1: TServerSocket;
   Memo1: TMemo;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure ServerSocket1Listen(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure ServerSocket1Accept(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure ServerSocket1ClientConnect(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure ServerSocket1ClientDisconnect(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure ServerSocket1ClientError(Sender: TObject;
     Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
     var ErrorCode: Integer);
   procedure ServerSocket1ClientRead(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Memo1.Clear;
Form1.ServerSocket1.Port := 65000;
Form1.ServerSocket1.ServerType := stNonBlocking;
Form1.ServerSocket1.Active := true;
Form1.Button1.Enabled := false;
Form1.Button2.Enabled := true;
Form1.Memo1.Lines.Append("Запуск сервера ... Запущен.");
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
while Form1.ServerSocket1.Active do Form1.ServerSocket1.Active := false;
Form1.Memo1.Lines.Append("Остановка сервера ... Остановлен");
Form1.Button1.Enabled := true;
Form1.Button2.Enabled := false;
end;

procedure TForm1.ServerSocket1Listen(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append("Слушаем порт: "+ IntToStr(Form1.ServerSocket1.Port));
end;

procedure TForm1.ServerSocket1Accept(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append("Клиент подключился.");
end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append("Подключается клиент ...");
end;

procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append("Клиент отключился.");
end;

procedure TForm1.ServerSocket1ClientError(Sender: TObject;
 Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
 var ErrorCode: Integer);
begin
Form1.Memo1.Lines.Append("Ошибка при подключении: "+IntToStr(ErrorCode));
ErrorCode := 0;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append("");
Form1.Memo1.Lines.Append("Получено сообщение от клиента");
Form1.Memo1.Lines.Append("> "+Socket.ReceiveText);

// 0 - номер подключившегося клиента ...
Form1.ServerSocket1.Socket.Connections[0].SendText("Ну, и иди ты :)))" + #13#10);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Button2Click(nil);
end;

end.



Пример клиента:


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ScktComp, Registry, IdBaseComponent, IdComponent,
 IdTCPConnection, IdTCPClient, IdHTTP;

type
 TForm1 = class(TForm)
   Button1: TButton;
   ClientSocket1: TClientSocket;
   Memo1: TMemo;
   Button2: TButton;
   Button3: TButton;
   procedure Button1Click(Sender: TObject);
   procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
     ErrorEvent: TErrorEvent; var ErrorCode: Integer);
   procedure ClientSocket1Connect(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure ClientSocket1Connecting(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure ClientSocket1Disconnect(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure Button2Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.ClientSocket1.Port := 65000;
Form1.ClientSocket1.Host := "127.0.0.1";
Form1.ClientSocket1.Active := true;
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append("");
Form1.Memo1.Lines.Append("Получен ответ от сервера");
Form1.Memo1.Lines.Append("> " + Socket.ReceiveText);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Button3Click(nil);
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
 Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
 var ErrorCode: Integer);
begin
Form1.Memo1.Lines.Append("Ошибка: " +inttostr(ErrorCode));
ErrorCode := 0;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append("Подключён к " + Form1.ClientSocket1.Host + " [ " + inttostr(Form1.ClientSocket1.Port) + " ] ");
end;

procedure TForm1.ClientSocket1Connecting(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append("Подключаюсь ... ");
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append("Отключен.");
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if Form1.ClientSocket1.Active then Form1.ClientSocket1.Socket.SendText("Привет!!! Я типа клиент!" + #13#10);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
while Form1.ClientSocket1.Active do Form1.ClientSocket1.Active := false;
end;

end.


 
Digitman ©   (2005-07-22 16:03) [3]


> Wm.DIGGER ©   (22.07.05 15:38) [2]


отсебячина


 
Wm.DIGGER ©   (2005-07-22 16:18) [4]

Digitman ©   (22.07.05 16:03) [3]

а что тебе не нравится?
вообще-то всё работает и очень хорошо!


 
Profik ©   (2005-07-22 16:19) [5]

//Сканирование сети
var u,result,i:integer;
 Computer      : Array[1..500] of String[25];
 ComputerCount : Integer;
 s:string;
 ss:string[2];
 Size         : cardinal;
   PRes         : PChar;
   BRes         : boolean;
   svernuto: boolean;
........
procedure FindAllComputers(Workgroup: String);
Var
 EnumHandle  : THandle;
 WorkgroupRS : TNetResource;
 Buf         : Array[1..500] of TNetResource;
 BufSize     : Cardinal;
 Entries     : Cardinal;
 Result      : Integer;

begin
 ComputerCount := 0;
 Workgroup := Workgroup + #0;
 FillChar(WorkgroupRS, SizeOf(WorkgroupRS) , 0);
 With WorkgroupRS do begin
   dwScope := 2;
   dwType := 3;
   dwDisplayType := 1;
   dwUsage := 2;
   lpRemoteName := @Workgroup[1];
 end;

 WNetOpenEnum( RESOURCE_GLOBALNET,
               RESOURCETYPE_ANY,
               0,
               @WorkgroupRS,
               EnumHandle );

 Repeat
   Entries := 1;
   BufSize := SizeOf(Buf);

   Result :=
    WNetEnumResource( EnumHandle,
                      Entries,
                      @Buf,
                      BufSize );
  If (Result = NO_ERROR) and (Entries = 1) then begin
     Inc( ComputerCount );
     Computer[ ComputerCount ] := StrPas(Buf[1].lpRemoteName);
     delete(Computer[ ComputerCount ],1,2);
     form1.ComboBox1.Items.Add(Computer[ ComputerCount ]);
   end;
 Until (Entries <> 1) or (Result <> NO_ERROR);

 WNetCloseEnum( EnumHandle );
end;  { Find All Computers }


 
Wm.DIGGER ©   (2005-07-22 16:30) [6]

Profik ©   (22.07.05 16:19) [5]

угу, спасибки ...


 
Digitman ©   (2005-07-22 16:41) [7]


> Wm.DIGGER ©   (22.07.05 16:18) [4]


ну взять хотя бы это :

procedure TForm1.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
Form1.Memo1.Lines.Append("Ошибка при подключении: "+IntToStr(ErrorCode));
ErrorCode := 0;
end;

то что возникновение события ClientError ты сопоставляешь с ошибкой при подключении кого-то там к кому-то - это и есть ничто иное как отсебячина.


 
Wm.DIGGER ©   (2005-07-22 16:47) [8]

Digitman ©   (22.07.05 16:41) [7]

да нет, я просто имел ввиду, что возникла ошибка сокета.
ну, написал случайно слово "подключение" ...
просто в данном, подчёркиваю, самом простом, как просили
примере, это самое вероятное что может возникнуть (если допустим, сервак забыли запустить :-)

я прекрастно понимаю, что ошибка может быть вызвана и другими вещами, но здесь это не кретично. спрашивали, как передать текст,
а не как ошибки обрабатывать. можно было вообще ни чего не писать про ошибки :)


 
Digitman ©   (2005-07-22 16:57) [9]


> здесь это не кретично


зато ТАМ это "кретично" !
крИтично в условиях Интерсети !

в Интерсети твой код работать не будет.
и дело даже не в [7] - в твоем коде полно упрощений, допустимых в ряде случаев лишь для условий лок.сети, если не сказать - для условий лок.хоста

кр.того, прочей отсебячины навалом ..

хочешь еще примеры отсебячины ?

пожалуйста !

procedure TForm1.ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append("Клиент подключился.");
end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Form1.Memo1.Lines.Append("Подключается клиент ...");
end;

последовательность возникновения этих событий строго обратная - сначала Accept, затем Connect

еще желаешь примеры отсебячины в твоем коде ?)


 
Wm.DIGGER ©   (2005-07-22 17:03) [10]

Digitman ©   (22.07.05 16:57) [9]

>последовательность возникновения этих событий строго обратная - сначала Accept, затем Connect

даааа, а ты проверь ка сначала, а потом пиши!
я сначала тоже написал в другом порядке, а вызываются они так,
как здесь написал! И работает это и для локальной сети и для Интернета и вообще РАБОТАЕТ. А если ты такой принципиальный, то написал бы сам, а не разводил тут демагогию.


 
Wm.DIGGER ©   (2005-07-22 17:16) [11]

зато ТАМ это "кретично" !
крИтично в условиях Интерсети ! - ой, боже мой, какое чудо!

ТАМ это где?

в Интерсети твой код работать не будет.
и дело даже не в [7] - в твоем коде полно упрощений, допустимых в ряде случаев лишь для условий лок.сети, если не сказать - для условий лок.хоста

и вообще, откуда ты это всё взял?
такм всего-то: подключение и отправка строки текста и ВСЁ.
это везде одинаково для любой сети!
просили написать ПРОСТОЙ ПРИМЕР!
я написал, да для локального хоста, т.к. это ПРИМЕР!
замени Host := "127.0.0.1"; на "www.delphimaster.ru", а порт на 80 и подключишься к этому сайту!
в место текста, пошли HTTPшный GET запрос и получишь в ответ главную страницу ... так, что всё, это работает. Не нужно тут сказок рассказывать.


 
Digitman ©   (2005-07-22 17:30) [12]


> Wm.DIGGER ©   (22.07.05 17:03) [10]


> ты проверь ка


и проверять не буду даже, ибо содрал ты это бездумно с демо-примера, каковой мне давным-давно известен


> сначала тоже написал в другом порядке, а вызываются они
> так,
> как здесь написал


LMD

умерь свою дурь и проштудируй от корки до корки хотя бы это

http://book.itep.ru/7/sock_71.htm

потом уже будешь раздавать направо-нгалево дурацкие "советы начинающим".


>  и для локальной сети и для Интернета и вообще РАБОТАЕТ


когда врешь - прищиривай один глаз.


> прекрастно


впору заняться изучением русского.


> если ты


да, если я.

"стринги через сокеты" есть полная галиматья, а решений для галиматьи я, увы, не имею.

а тебе, сударь, советую прекратить публиковать в Форуме копии зачастую дурных (и не проверенных тобой) примеров от Борланда и заняться изучением различий между синхронным и асинхронным гнездовым транспортом.


 
Wm.DIGGER ©   (2005-07-22 17:58) [13]

Digitman ©   (22.07.05 17:30) [12]

Я русский, в отличие от тебя, знаю хорошо.
Просто пишу быстро, вот и опечатки идут.

Ты придираешься к словам, т.к. больше не к чему.
Ты наверняка всё же проверил код и узнал, что ты не прав! И что всё именно так, как я говорю. (А если нет, то ты ещё глупее, чем кажешься! У меня прога, построенная по этому принципу, прекрасно работала и в локалке и в Нете.
А теперь ты пытаешься усмирить свое безразмерное ЕГО,  придираясь к мелочам.  «Передать string» ему не понравилось! … Да, будет тебе известно, что string на Английском означает «строка», строка текста, если тебя больше так лучше понятно. Так вот, передать текст, через сокет – это не ересь, а формат данных (текстовый формат, если ты не понял). И функция называется SendText … надеюсь с этим проблем нет!

Ты мне напоминаешь дурного ребёнка. Если тебе нужно отдельно объяснять, что имелось ввиду в вопросе, то извини это не лечится! А все эти дурные статьи, которые ты так ценишь, я ещё лет 5-7 назад все перечитал. Так что успокойся.


 
Wm.DIGGER ©   (2005-07-22 18:00) [14]

Digitman ©   (22.07.05 17:30) [12]

P.S. Надеюсь, ты понял, почему ЕГО, а не ЭГО :-))))))))


 
Digitman ©   (2005-07-22 18:17) [15]


> все эти дурные статьи, которые ты так ценишь, я ещё лет
> 5-7 назад все перечитал


.. и ничерта ты там, в этих статьях, не понял, коль в неблокирующем режиме игнорируешь результат вызова send-метода

а это вот

while Form1.ClientSocket1.Active do Form1.ClientSocket1.Active := false;

просто шедевр.


 
Digitman ©   (2005-07-22 18:22) [16]


> Wm.DIGGER ©   (22.07.05 18:00) [14]


Прежде чем постить заведомо дерьмовые примеры (тщательно скрывая, что содраны они чуть ли не один к одному из не самых удачных демо-перлов от Борланда), открой scktcomp.pas, Winsock.pas и изучи, олух, от корки до корки ! Сопоставляя штудируемое с теорией/механикой работы гнезд Беркли и stream-oriented транспортного протокола !


 
Wm.DIGGER ©   (2005-07-22 18:29) [17]

Digitman ©   (22.07.05 18:17) [15]

и ничерта ты там, в этих статьях, не понял, коль в неблокирующем режиме игнорируешь результат вызова send-метода

Ну, сколько же раз объяснять, это ПРОСТЕЙШИЙ ПРИМЕР, а с обработкой, это уже будет НЕ ПРОСТЕЙШИЙ.

while Form1.ClientSocket1.Active do Form1.ClientSocket1.Active := false;

Не нужно ругаться! Да, это выдумка, но этот "шедевр" позволяет дождаться пока не произойдёт disconnect и только после этого продолжать выполнение программы. А без этого если потом (сразу, допустим) опять вызвать соединение (active := true), то прога тут же ошибку выдаст, поскольку сокет ещё занят!  Только, там ещё Application.ProcessMessages в цикле нужно, а то повиснет это дело тут же. Этот «шедевр» из имперической области, в теории конечно этого нет.


 
Wm.DIGGER ©   (2005-07-22 18:31) [18]

> Прежде чем постить заведомо дерьмовые примеры ...

ЭТОТ ПРИМЕР РАБОЧИЙ!!!!! И НЕ ОТКУДА НЕ СОДРАН, СКОЛЬКО РАЗ ПОВТОРЯТЬ!!!!!!!!!!!!!!!!!!!!!!!!!!!! ГЛУХОЙ ТЫ, ЧТО ЛИ? (слепой в смысле)


 
Wm.DIGGER ©   (2005-07-22 18:37) [19]

Digitman ©   (22.07.05 18:22) [16]

Я вот не понимаю! Любой, кто запустит этот код убедиться, что он рабочий. Почему ты даже не запустив его говоришь о нём всякую хрень. Ну, проверь, ну ведь работает. Неужели так трудно признать свою ошибку.
В общем, не хочу я больше с тобой спорить. Я понял, что ты из тех людей, которые не признают свои ошибки, и будут доказывать свою, пусть и ложную, правоту любой ценой. Я устал от этого, любой, кто воспользуется этим кодом, поймёт кто прав. Всего доброго. Удачи!


 
Digitman ©   (2005-07-22 18:42) [20]


> Этот «шедевр» из имперической области


"империческая область" и есть та самая твоя отсебячина.


> "шедевр" позволяет дождаться пока
> не произойдёт disconnect и только после этого продолжать
> выполнение программы


какого ж тогда лешего ты не делаешь то же самое в

procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.ClientSocket1.Port := 65000;
Form1.ClientSocket1.Host := "127.0.0.1";
Form1.ClientSocket1.Active := true;
//<-здесь
end

??

если уж на то пошло, то "шедевр" был бы уместен именно при ожидании коннекта, а не дисконнекта !


 
Wm.DIGGER ©   (2005-07-22 18:52) [21]

Digitman ©   (22.07.05 18:42) [20]

> "империческая область" и есть та самая твоя отсебячина.

Ну, возможно, в этом случае, да. Но это работает! И нормально работает. Поэтому ни чего предосудительного в этом нет.

какого ж тогда лешего ты не делаешь то же самое

ну, да, был бы и там уместен. я же говорю, за 5 мин. писал, человек в чате просил ... пропустил просто.

Почему бы тебе на написать самому, по всем правилам, как это должно выглядеть? Это было бы только хорошо. А чего ругаться-то? Вопрос, чётко сформулирован. Сделай доброе дело, напиши, как нужно.


 
Wm.DIGGER ©   (2005-07-22 18:54) [22]

Digitman ©   (22.07.05 18:42) [20]

procedure TForm1.Button1Click(Sender: TObject);
begin

вообще было бы уместнее здесь ещё, чтобы гарантировать, что
перед соединением сокет свободен ...

Form1.ClientSocket1.Port := 65000;
Form1.ClientSocket1.Host := "127.0.0.1";
Form1.ClientSocket1.Active := true;
//<-здесь
end


 
Alexander Panov ©   (2005-07-22 20:09) [23]

Вот. Написал в качестве разминки. Это наметки для чата точка-точка.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls, ToolWin, ComCtrls, ScktComp, Buttons;

type
 TForm1 = class(TForm)
   cs: TClientSocket;
   ss: TServerSocket;
   ToolBar1: TToolBar;
   Panel1: TPanel;
   edText: TEdit;
   paOK: TPanel;
   re: TRichEdit;
   sbConnect: TSpeedButton;
   procedure FormCreate(Sender: TObject);
   procedure edTextKeyPress(Sender: TObject; var Key: Char);
   procedure csConnect(Sender: TObject; Socket: TCustomWinSocket);
   procedure sbConnectClick(Sender: TObject);
   procedure csDisconnect(Sender: TObject; Socket: TCustomWinSocket);
   procedure csError(Sender: TObject; Socket: TCustomWinSocket;
     ErrorEvent: TErrorEvent; var ErrorCode: Integer);
   procedure AppException(Sender: TObject; E: Exception);
   procedure csRead(Sender: TObject; Socket: TCustomWinSocket);
   procedure ssClientConnect(Sender: TObject; Socket: TCustomWinSocket);
   procedure ssClientRead(Sender: TObject; Socket: TCustomWinSocket);
   procedure paOKMouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure paOKMouseUp(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
 private
   FBuf: String;
   procedure SetButtonEnabled;
 public
   procedure Disp(S: String);
 end;

const
 CRLF=#13#10;
var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.OnException := AppException;
 edText.Align := alClient;
 edText.Text := "";
 edText.Color := clBtnFace;
 re.Lines.Text := "";
 FBuf := "";
 ss.Port := 5555;
 ss.Open;
end;

procedure TForm1.edTextKeyPress(Sender: TObject; var Key: Char);
begin
 if Key=#13 then
 begin
   if Length(edText.Text)>0 then cs.Socket.SendText(edText.Text+CRLF);
   Key := #0;
   edText.Text := "";
 end;
end;

procedure TForm1.csConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
 Disp("Connected to "+Socket.RemoteAddress);
 SetButtonEnabled;
end;

procedure TForm1.sbConnectClick(Sender: TObject);
begin
 sbConnect.Enabled := False;
 cs.Active := not cs.Active;
end;

procedure TForm1.SetButtonEnabled;
begin
 case cs.Active of
   True:
     begin
       sbConnect.Caption := "Disconnect";
       edText.Color := clWindow;
     end;
   False:
     begin
       sbConnect.Caption := "Connect";
       edText.Color := clBtnFace;
     end;
 end;
 edText.Enabled := cs.Active;
 sbConnect.Enabled := True;
end;

procedure TForm1.csDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
 SetButtonEnabled;
 Disp("Disconnected");
end;

procedure TForm1.csError(Sender: TObject; Socket: TCustomWinSocket;
 ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
 SetButtonEnabled;
end;

procedure TForm1.Disp(S: String);
var
 n: Integer;
begin
 n := Length(Re.Lines.Text);//-re.Lines.Count*2;
 re.Lines.Add(FormatDateTime("hh:nn:ss ",now)+s);

 re.SelStart := n;
 re.SelLength := 8;
 re.SelAttributes.Style := re.SelAttributes.Style+[fsBold];
 re.SelLength := 0;

 re.SelAttributes.Style := re.SelAttributes.Style-[fsBold];

 if re.Lines.Count>500 then re.Lines.Delete(0);

end;

procedure TForm1.AppException(Sender: TObject; E: Exception);
begin
 if E is ESocketError then
 begin
   Disp("Error. "+ E.Message);
   Exit;
 end;
 Application.ShowException(E);
end;

procedure TForm1.csRead(Sender: TObject; Socket: TCustomWinSocket);
var
 pz: integer;
 Str: String;
begin
 repeat
   Str := Socket.ReceiveText;
   FBuf := FBuf+Str;
 until Str="";

 FBuf := FBuf;

 repeat
   pz := Pos(CRLF,FBuf);
   if pz>0 then
   begin
     Disp("Принято:"+Copy(FBuf,1,pz-1));
     Delete(FBuf,1,pz+1);
   end;
 until pz=0;
end;

procedure TForm1.ssClientConnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 Socket.SendText("Welcome to server"+CRLF);
end;

procedure TForm1.ssClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
 EchoStr: String;
begin
 EchoStr := Socket.ReceiveText;
 Socket.SendText(EchoStr);
end;

procedure TForm1.paOKMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 paOk.BevelOuter := bvLowered;
end;

procedure TForm1.paOKMouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
var
 Key: Char;
begin
 Key := #13;
 edTextKeyPress(edText,Key);
 paOk.BevelOuter := bvRaised;
end;

end.



Проект лежит здесь:
ftp://ftp.almar.net.ru/pub/chat/chat.zip


 
Atrion ©   (2005-07-22 20:38) [24]

Как мы не стараемся а как у битлз все равно не получается...
...не далеко мы уходим от кодов Borland...


 
Alexander Panov ©   (2005-07-23 18:49) [25]

Atrion ©   (22.07.05 20:38) [24]
...не далеко мы уходим от кодов Borland...


Эта фраза что означает?



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.063 c
2-1129453886
quadronik
2005-10-16 13:11
2005.11.06
Хотите отвечайте, хотите нет...


3-1127730434
_RusLAN
2005-09-26 14:27
2005.11.06
Как перенести даные из MS Access в базу Firebird


1-1129546319
integery
2005-10-17 14:51
2005.11.06
как узнать чем запущен ActiveX cscript.exe или wscript.exe


2-1129026035
B@BY
2005-10-11 14:20
2005.11.06
Как работать с БД не используя VCL?


14-1129636090
dreamse
2005-10-18 15:48
2005.11.06
Срочно ! Нужна утилита для определания информации о процесе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский