⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.~pas

📁 实现局部网及时聊天等很多功能,包括视频
💻 ~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 + -