Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.06;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.027 c
14-1129703143
cyborg
2005-10-19 10:25
2005.11.06
MMSYSTEM.HLP


14-1129531258
Маг Похмеляйнен
2005-10-17 10:40
2005.11.06
Просьба проверить баг в Borland C++ Builder 6


14-1129529606
TButton
2005-10-17 10:13
2005.11.06
Жжжжжуть


4-1125093097
ronyn
2005-08-27 01:51
2005.11.06
Как шрифт установить?...


1-1129723022
apellido
2005-10-19 15:57
2005.11.06
Как ограничить кол-во символов в TEdit для пропорц. шрифтов