Indy10的IdTCPServer和IdTCPClient

syrwq 2008-03-18 10:08:30
我正做一个局域网的c/s数据库系统.
若干客户端和一个服务器.服务器需要监测各个客户端的情况,例如:客户端是否启动,关闭电脑,发送信息等等.
原来没有做过这一块,请问是不是用Indy10的IdTCPServer和IdTCPClient来实现?最好给我一个例程看看.indy10的demo好像没有我要的功能.谢谢
...全文
512 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
接分是王道!
火龙岛主 2008-03-22
  • 打赏
  • 举报
回复
你把IndyTCP那个例子扩展一个就可以了。就像心跳,c向s发送心跳,s检测c的心跳,超过监听预设时间,就认为c不存在。
c=Client
s=Server
lyguo 2008-03-22
  • 打赏
  • 举报
回复
找一个灰鸽子的源代码,里面怎么控制的都有,呵呵.
一滴木 2008-03-21
  • 打赏
  • 举报
回复
给你一个我在网上找得例子,我自己改了改。这是连接的部分,控制的你自己写吧。
unit MainFrm;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdCustomTCPServer, IdTCPServer, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, ComCtrls, StdCtrls, ExtCtrls, IdContext;

type
TfrmMain = class(TForm)
tcpClient: TIdTCPClient;
tcpServer: TIdTCPServer;
statusBar: TStatusBar;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
serverip: TLabeledEdit;
serverport: TLabeledEdit;
serverstop: TButton;
clientcon: TButton;
clientdiscon: TButton;
memo: TMemo;
msg: TEdit;
sendbt: TButton;
serverstart: TButton;
procedure tcpServerExecute(AContext: TIdContext);
procedure tcpServerConnect(AContext: TIdContext);
procedure serverstopClick(Sender: TObject);
procedure serverstartClick(Sender: TObject);
procedure sendbtClick(Sender: TObject);
procedure msgKeyPress(Sender: TObject; var Key: Char);
procedure FormCreate(Sender: TObject);
procedure clientdisconClick(Sender: TObject);
procedure clientconClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.clientconClick(Sender: TObject);
begin //客户端点了连接按钮
if serverip.Text = '' then
begin
MessageDlg('请输入服务器IP',mtError,[mbok],0);
serverip.SetFocus;
end;
if serverport.Text = '' then
begin
MessageDlg('请输入服务器端口号',mtError,[mbok],0);
serverport.SetFocus;
end;
tcpclient.Host := serverip.Text;
tcpClient.Port := StrtoInt(serverport.Text);
try
tcpclient.Connect;
statusBar.SimpleText := '已连接' + serverip.Text;
memo.Lines.Add('已连接' + serverip.Text)
except
statusBar.SimpleText := '服务器连接不上';
end;
end;

procedure TfrmMain.clientdisconClick(Sender: TObject);
begin //客户端点了断开
tcpclient.Disconnect();
memo.Lines.Add('客户端已断开');
statusbar.SimpleText := '客户端已断开';
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
//自动启动服务器
try
tcpserver.Active := true;
statusbar.SimpleText := '服务器已启动';
except
statusbar.SimpleText := '本软件使用的端口被占用';
end;
end;

procedure TfrmMain.msgKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
sendbt.Click;
end;
end;

procedure TfrmMain.sendbtClick(Sender: TObject);
begin
//发送信息
if msg.Text = '' then
begin
MessageDlg('请输入要发送的信息',mtError,[mbOk],0);
msg.SetFocus;
end
else
begin
tcpClient.Socket.WriteLn(msg.Text);
//tcpClient.SendCmd(msg.Text);
//tcpclient.WriteLn(msg.Text);
end;
end;

procedure TfrmMain.serverstartClick(Sender: TObject);
begin
//服务器端启动
if not tcpServer.Active then
begin
tcpServer.Active := true;
statusBar.SimpleText := '服务器端已启动';
end;
end;

procedure TfrmMain.serverstopClick(Sender: TObject);
begin
//服务器端停止
if tcpServer.Active then
begin
tcpServer.Active := false;
statusBar.SimpleText := '服务器端已停止';
end;
end;

procedure TfrmMain.tcpServerConnect(AContext: TIdContext);
begin
memo.Lines.Add('接收来自'+AContext.Connection.Socket.Binding.PeerIP+'的连接');
end;

procedure TfrmMain.tcpServerExecute(AContext: TIdContext);
var
readstr: string;
begin
readstr := AContext.Connection.Socket.ReadLn();
memo.Lines.Add(readstr);
end;

end.
UndefinedCoder 2008-03-18
  • 打赏
  • 举报
回复
LZ胡说八道,Indy10的Demo没有演示发送和接受数据的功能?

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧