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

📄 unit1.pas

📁 CS型聊天室3.0版.rar
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    ServerSocket1: TServerSocket;
    RichEdit1: TRichEdit;
    StatusBar1: TStatusBar;
    GroupBox1: TGroupBox;
    Edit1: TEdit;
    GroupBox2: TGroupBox;
    ListView1: TListView;
    procedure FormCreate(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
   serversocket1.Active :=true;
   RichEdit1.Lines.add(datetostr(date)+' '+timetostr(time)+'==>'+'聊天室服务器启动了');
   StatusBar1.SimpleText:='聊天室服务器启动了';
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var   s,str,name,nei_rong:string;
      i,n:integer;
      all_name,ni_cheng:string;
      newitem:TListItem;
begin
   s:=Socket.ReceiveText;  //接收字符串
   n:=pos('@',s);
   if n>0 then
   begin
      str:=copy(s,1,n-1);
      if str='交谈' then  //格式:"交谈"@"to昵称"@"内容"
      begin
         str:=copy(s,n+1,length(s)-n);
         name:=copy(str,3,pos('@',str)-3);  //交谈的对象昵称
         nei_rong:=copy(str,pos('@',str)+1,length(str)-pos('@',str));//交谈的内容
         for i:=0 to ListView1.Items.count-1 do  //根据发言者IP找发言者昵称
         begin
           if  socket.RemoteAddress=ListView1.Items[i].subitems[0] then
             begin
             ni_cheng:= ListView1.Items[i].caption;
             RichEdit1.Lines.add(ni_cheng+'对'+name+'说'+nei_rong);              end;
         end;

         for i:=0 to ListView1.Items.count-1 do //根据交谈的对象昵称找交谈的对象IP
         begin
           if  name=ListView1.Items[i].caption then
             name:=ListView1.Items[i].subitems[0]; //subitems[0]存放IP
         end;

         for i:=0 to ListView1.Items.count-1 do  //实现私聊
            begin
             if ServerSocket1.Socket.Connections[i].RemoteAddress=name then
              ServerSocket1.Socket.Connections[i].SendText('交谈@'+ni_cheng+'@'+nei_rong);
            end;
       end;
      if str='昵称' then  //昵称@xmj
      begin
        all_name:='';
        newitem:=ListView1.Items.insert(ListView1.Items.count);

        newitem.caption:=copy(s,pos('@',s)+1,length(s)-pos('@',s));
        newitem.SubItems.Add(socket.RemoteAddress);
        newitem.SubItems.Add(socket.RemoteHost);
        RichEdit1.Lines.add(newitem.caption+'进来了');
        for i:=0 to ListView1.Items.count-1 do
        all_name:=all_name+ListView1.Items[i].Caption +'^'+ListView1.Items[i].subitems[0]+'@';
        for i:=0 to ListView1.Items.count-1 do  //广播新进入用户
        begin
         ServerSocket1.Socket.Connections[i].SendText('添加用户@'+all_name);
        end;
      end;
   end;
end;


procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);      //用户离开触发
var i:integer;ni_cheng:string;
begin
        for i:=0 to ListView1.Items.count-1 do  //根据发言者IP找发言者昵称
         begin
           if  socket.RemoteAddress=ListView1.Items[i].subitems[0] then
             begin
             ni_cheng:= ListView1.Items[i].caption;
             RichEdit1.Lines.add(ni_cheng+'离开了');
             end;
         end;
       for i:=0 to ListView1.items.count-1 do  //ListView1中查找离开用户
         begin
         if  Socket.RemoteAddress= ListView1.Items[i].subitems[0] then
            Listview1.Items.Item[i].Delete();
         end;
      for i:=0 to ListView1.items.count-1 do    //广播离开用户
         ServerSocket1.Socket.Connections[i].SendText('离开@'+ListView1.Items[i].caption);

end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var i:integer;
begin
if key=13 then
    begin
      for i:=0 to ListView1.items.count-1  do  //广播用户
      begin
      ServerSocket1.Socket.Connections[i].SendText('交谈@'+'all'+'@'+edit1.Text );
      edit1.text:='';
      end;
    end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -