Форум: "Сети";
Текущий архив: 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.04 c