![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите сделать простое клиент-сервер приложение [D7, WinXP]
Святослав © (2006-10-20 03:38:00)Сервер:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls,ScktComp;
type
TForm1 = class(TForm)
Start: TButton;
serv: TTcpServer;
procedure Start(Sender: TObject);
procedure servAccept(Sender: TObject; ClientSocket: TCustomIpClient);
procedure servListening(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Start(Sender: TObject);
begin
serv.LocalHost:='localhost';
serv.LocalPort:=’1025’;
serv.Open;
end;
procedure TForm1.servAccept(Sender: TObject;
ClientSocket: TCustomIpClient);
begin
showmessage(serv.Receiveln());
end;
procedure TForm1.servListening(Sender: TObject);
begin
beep;
end;
end.
Клиент:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls,ScktComp;
type
TForm1 = class(TForm)
Start: TButton;
Client: TTcpClient;
procedure Start(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Start(Sender: TObject);
begin
client.RemoteHost:=’localhost’;
client.RemotePort:=’1025’;
client.Open;
client.Sendln('hello');
end;
end.
Сергей М. (2006-12-21 08:21:00) [1]
> _sten_ © (20.12.06 22:44) [22]
Проще простого.
Open;
SendXXXX;
ReceiveXXXX;
_sten_ (2006-12-20 22:44:00) [2]А как работать в режиме ctBlocking ктото знает?
Сергей М. (2006-10-30 09:02:00) [3]
> Святослав © (29.10.06 19:22) [18]
Отправку сообщений следует начинать не раньшевозникновения события On[Client]Write !
Святослав (2006-10-29 23:28:00) [4]
> всё. разговор окончен.
Баба с воза, кабыла на воз...
Ketmar (2006-10-29 19:23:00) [5]>[18] Святослав(c) 29-Oct-2006, 19:22
>Да лень, все на английском и для профи...
всё. разговор окончен.
Святослав (2006-10-29 19:22:00) [6]
> ну вот какого ангела ты делаешь SendText(), не дав клиентскому
> сокету кончить? пусть он сначала получит оргазм от соединения,
> а потом уже оправляй что-то.
client:=TClientSocket.Create(self);
client.Host:='localhost';
client.Port:=Np.Position;
client.Active:=true;
repeat
until client.Active;
client.Socket.SendText('aaa');
Не кончает :((( Зависает...
> просто кое-кому лень литературу читать. %-))
Да лень, все на английском и для профи...
У тебя есть что-нибудь в электроном виде? или ссылка на толковый источник?
Ketmar (2006-10-28 04:46:00) [7]ну вот какого ангела ты делаешь
SendText(), не дав клиентскому сокету кончить? пусть он сначала получит оргазм от соединения, а потом уже оправляй что-то.
зыж глюки не в WinAPI. просто кое-кому лень литературу читать. %-))
Святослав (2006-10-28 04:02:00) [8]
> TClientSocket() по-умолчанию создаётся в неблокирующем режиме.
> поэтому ты только говоришь ему "давай, соединяйся". дальше
> он себе что-то делает некоторое время. а ты, пока он занят,
> пристаёшь с глупыми вопросами: "ну как? ты кончил?"
> обрабатывай событие "OnConnect" -- будет тебе счастье. или
> переведи client в блокирующий режим: client.ClientType :
> = ctBlocking;.
Продвинулся дальше, но выплыл новейший глюк из разряда WinAPI! Если не лень посмотри, должно понравиться :)
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls,ScktComp, Sockets;
type
TForm1 = class(TForm)
Nport: TLabeledEdit;
Np: TUpDown;
kn: TButton;
procedure knClick(Sender: TObject);
private
{ Private declarations }
public
procedure w(Sender: TObject; Socket: TCustomWinSocket);
{ Public declarations }
end;
var
Form1: TForm1;
serv:TServerSocket;
client:TClientSocket;
implementation
{$R *.dfm}
procedure TForm1.w;
begin
showmessage(serv.Socket.ReceiveText);
end;
procedure TForm1.knClick(Sender: TObject);
begin
serv:=TServerSocket.Create(self);
serv.Port:=np.Position;
serv.OnClientWrite:=w;
serv.Active:=true;
client:=TClientSocket.Create(self);
client.Host:='localhost';
client.Port:=Np.Position;
client.Active:=true;
client.Socket.SendText('aaa');
end;
end.
Событие OnClientWrite происходит, но наверно я его раково обрабатываю…
Ketmar (2006-10-27 05:13:00) [9]>[14] Святослав(c) 27-Oct-2006, 04:16
>Нет свойств LocalPort, RemoteHost в TServerSocket и
>TClientSocket :(
хм. справка врёт? ладно. лень проверять. тогда поясню "на пальцах". %-)
TClientSocket() по-умолчанию создаётся в неблокирующем режиме. поэтому ты только говоришь ему "давай, соединяйся". дальше он себе что-то делает некоторое время. а ты, пока он занят, пристаёшь с глупыми вопросами: "ну как? ты кончил?"
обрабатывай событие "OnConnect" -- будет тебе счастье. или переведи client в блокирующий режим:client.ClientType := ctBlocking;.
Святослав (2006-10-27 04:16:00) [10]
> TServerSocket:
> You can specify this port using the LocalPort property.
>
> TClientSocket:
> Use the RemoteHost property to specify the remote host server.
>
> At runtime, use the Open or Close method to open or close
> the connection.
Нет свойств LocalPort, RemoteHost в TServerSocket и TClientSocket :(
Ketmar (2006-10-27 03:45:00) [11]TServerSocket:
You can specify this port using the LocalPort property.
TClientSocket:
Use the RemoteHost property to specify the remote host server.
At runtime, use the Open or Close method to open or close the connection.
(ц) справка
Open() же справедливо и для TServerSocket. но это детали.
Святослав (2006-10-27 03:31:00) [12]У кого-нибудь есть ценная мысль по такой проблеме:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls,ScktComp;
type
TForm1 = class(TForm)
Nport: TLabeledEdit;
Np: TUpDown;
kn: TButton;
procedure knClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
serv:TServerSocket;
client:TClientSocket;
implementation
{$R *.dfm}
procedure TForm1.knClick(Sender: TObject);
begin
serv:=TServerSocket.Create(self);
serv.Port:=np.Position;
serv.Active:=true;
showmessage(booltostr(serv.Active,true));
client:=TClientSocket.Create(self);
client.Host:='localhost';
client.Port:=Np.Position;
client.Active:=true;
showmessage(booltostr(client.Active,true));
end;
end;
serv.Active устанавливается в true, client.Active нет!!! Что не так?
Святослав (2006-10-21 02:35:00) [13]
> http://ln.com.ua/~openxs/articles/smart-questions-ru.html
Понятно :))))))))))))))))
Ketmar (2006-10-21 02:28:00) [14]>[9] Святослав(c) 21-Oct-2006, 02:26
>Объясни пожалуйста для особо одаренных что это значит?
http://ln.com.ua/~openxs/articles/smart-questions-ru.html
Святослав (2006-10-21 02:26:00) [15]
> перестанешь флудить.
Объясни пожалуйста для особо одаренных что это значит?
Ketmar (2006-10-21 02:14:00) [16]>[7] Святослав(c) 21-Oct-2006, 02:07
>А смысл?
перестанешь флудить.
Святослав (2006-10-21 02:07:00) [17]
> тогда заодно и физкультурой позанимаешься.
А смысл?
Ketmar (2006-10-21 01:51:00) [18]>[5] Святослав(c) 21-Oct-2006, 01:42
>далеко...
тогда заодно и физкультурой позанимаешься.
Святослав (2006-10-21 01:42:00) [19]
> бывает. магазин хозтоваров недалеко, полагаю?
далеко...
Ketmar (2006-10-20 23:48:00) [20]>[3] Святослав(c) 20-Oct-2006, 23:29
>Неработает :(((
бывает. магазин хозтоваров недалеко, полагаю?