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

📄 server.cpp

📁 一个简单的聊天程序(BCB) 服务器端:server.cpp 客户端:client.cpp
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString NowlogName="";
AnsiString NowlogHost="";
AnsiString NowlogAddress="";
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
 Memo1->Clear();
 ListBox1->Clear();
 ListBox2->Clear();
 ListBox3->Clear();
 ServerSocket1->Active=true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
 Memo1->Clear();
 ListBox1->Clear();
 ListBox2->Clear();
 ListBox3->Clear();
 AnsiString SysInfo;
 SysInfo="["+TimeToStr(Now())+"]"+" 与服务器失去连接!请重新连接!";
 int M=0;
 M=ServerSocket1->Socket->ActiveConnections;
 for(int i=0;i<M;i++)
 {
  ServerSocket1->Socket->Connections[i]->SendText(SysInfo);
 }
 ServerSocket1->Active=false;
 ServerSocket1->Close();
 Form1->Close();

}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
 NowlogHost=Socket->RemoteHost;
 NowlogAddress=Socket->RemoteAddress;
 AnsiString Data=Socket->ReceiveText(); //接收用户发送的信息
 AnsiString SubData1=Data.SubString(Data.Length()-7,8); //分析信息
 AnsiString SubData2=Data.SubString(1,Data.Length()-8);
 if(SubData1=="@login@@") //如果是用户登陆的信息
  {
   ListBox1->Items->Add(SubData2); //用户信息加入到用户列表
   ListBox2->Items->Add(NowlogAddress);
   ListBox3->Items->Add(NowlogHost);
   AnsiString SysInfo="["+TimeToStr(Now())+"]"+SubData2+" 加入了会议!";//显示系统信息
   Memo1->Lines->Add(SysInfo);
   if(ServerSocket1->Socket->ActiveConnections)
     for(int i=0;i<ServerSocket1->Socket->ActiveConnections;i++)
//       ServerSocket1->Socket->Connections[i]->SendText(SubData2+"@login@@");
       ServerSocket1->Socket->Connections[i]->SendText("@login@@"+SubData2+"@"+NowlogHost+"@"+NowlogAddress);

  }
 else if(SubData1=="@logout@") //如果是用户退出会议
  {
   int Index1=ListBox1->Items->IndexOf(SubData2); //从用户列表中删除该用户信息
   ListBox1->Items->Delete(Index1);
   int Index2=ListBox2->Items->IndexOf(NowlogAddress);
   ListBox2->Items->Delete(Index2);
   int Index3=ListBox3->Items->IndexOf(NowlogHost);
   ListBox3->Items->Delete(Index3);
   Memo1->Lines->Add("["+TimeToStr(Now())+"]"+SubData2+" 退出了会议!"); //显示系统信息
   if(ServerSocket1->Socket->ActiveConnections)
     for(int i=0;i<ServerSocket1->Socket->ActiveConnections;i++)
//       ServerSocket1->Socket->Connections[i]->SendText(SubData2+"@logout@");
       ServerSocket1->Socket->Connections[i]->SendText("@logout@"+SubData2+"@"+NowlogHost+"@"+NowlogAddress);
  }
 else
  {
   Data="["+TimeToStr(Now())+"]"+Data; //加入系统时间
   Memo1->Lines->Add(Data);
   //向所有用户转发信息
   if(ServerSocket1->Socket->ActiveConnections)
     for(int i=0;i<ServerSocket1->Socket->ActiveConnections;i++)
       ServerSocket1->Socket->Connections[i]->SendText(Data);
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1Change(TObject *Sender)
{
 if(Memo1->Lines->Count>=100)
  Memo1->Lines->Clear();
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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