📄 unit1.~pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdAntiFreezeBase, IdAntiFreeze, IdTCPConnection,
IdTCPClient, IdBaseComponent, IdComponent, IdTCPServer,StrUtils;
type
TForm1 = class(TForm)
itsTalk: TIdTCPServer;
itcTalk: TIdTCPClient;
iafTalk: TIdAntiFreeze;
GroupBox1: TGroupBox;
memoSystemInfo: TMemo;
GroupBox2: TGroupBox;
editPort: TEdit;
btnBegin: TButton;
btnEnd: TButton;
Label1: TLabel;
GroupBox3: TGroupBox;
lbUser: TListBox;
GroupBox4: TGroupBox;
memoTalkInfo: TMemo;
GroupBox5: TGroupBox;
Button1: TButton;
Button2: TButton;
procedure itsTalkConnect(AThread: TIdPeerThread);
procedure itsTalkExecute(AThread: TIdPeerThread);
procedure btnBeginClick(Sender: TObject);
procedure btnEndClick(Sender: TObject);
procedure memoTalkInfoChange(Sender: TObject);
procedure updateip();
procedure updateuserip();
procedure closeserver();
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
acceptstr:string;
sendid:string;
PeerIP:string;
implementation
{$R *.dfm}
procedure TForm1.itsTalkConnect(AThread: TIdPeerThread);
begin
memoSystemInfo.Lines.Add(DateTimeToStr(Now())+':'+Athread.Connection.Socket.Binding.PeerIP+'已经连接到服务器!');
Athread.Connection.WriteLn(' 欢迎连接紫青局域网聊天服务器!');
lbUser.Items.Add(Athread.Connection.Socket.Binding.PeerIP);
//Athread.Connection.WriteLn(lbUser.Items.CommaText);
updateuserip();
end;
procedure TForm1.updateuserip();
var
i:integer;
begin
for i:=0 to lbUser.Count-1 do
begin
itcTalk.Host:=lbUser.Items[i];
itcTalk.Port:=6061;
itcTalk.Connect(500);
itcTalk.WriteLn('p'+lbUser.Items.CommaText);
itcTalk.Disconnect();
end;
end;
procedure TForm1.updateip();
var
i:integer;
begin
for i:=0 to lbUser.Count-1 do
begin
if lbUser.Items[i]=PeerIP then
begin
lbUser.Items.Delete(i);
exit;
end;
end;
updateuserip();
end;
procedure TForm1.itsTalkExecute(AThread: TIdPeerThread);
begin
acceptstr:=Athread.Connection.ReadLn();
PeerIP:=AThread.Connection.Socket.Binding.PeerIP;
if SameText(acceptstr,'QUIT') then
begin
memoSystemInfo.Lines.Add(DateTimeToStr(Now())+' :'+PeerIP+'退出服务器!');
updateip();
end
else
begin
sendid:=Leftstr(acceptstr,AnsiPos(',',acceptstr)-1);//通过AnsiPos(const Substr, S: string)返回子串Substr出现在主串S中的第一个位置
memoSystemInfo.Lines.Add(DateTimeToStr(Now())+':'+AThread.Connection.Socket.Binding.PeerIP+' 发送消息给 '+sendid);
memoTalkInfo.Lines.Add(DateTimeToStr(Now())+':'+AThread.Connection.Socket.Binding.PeerIP+' 微笑地说:'+acceptstr);
Athread.Connection.WriteLn('发送成功!');
end;
end;
procedure TForm1.btnBeginClick(Sender: TObject);
begin
itsTalk.DefaultPort:=strtoint(editPort.Text);
itsTalk.Active:=true;
btnBegin.Enabled:=false;
btnEnd.Enabled:=true;
memoSystemInfo.Lines.Add(DateTimeToStr(Now())+':'+'服务器已经启动!');
end;
procedure TForm1.closeserver();
var
i:integer;
begin
for i:=0 to lbUser.Count-1 do
begin
itcTalk.Host:=lbUser.Items[i];
itcTalk.Port:=6061;
itcTalk.Connect(500);
itcTalk.WriteLn('q'+lbUser.Items.CommaText);
itcTalk.Disconnect();
end;
end;
procedure TForm1.btnEndClick(Sender: TObject);
begin
closeserver();
itsTalk.Active:=false;
btnBegin.Enabled:=true;
btnEnd.Enabled:=false;
memoSystemInfo.Lines.Add(DateTimeToStr(Now())+':'+'服务器已经停止!');
end;
procedure TForm1.memoTalkInfoChange(Sender: TObject);
begin
itcTalk.Host:=sendid;
itcTalk.Port:=6061;
itcTalk.Connect(500);
memoSystemInfo.Lines.Add(itcTalk.ReadLn());
itcTalk.WriteLn(PeerIP+' 微笑地对你说:'+acceptstr);
itcTalk.Disconnect();
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -