?? 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 + -