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

📄 main.cpp

📁 《C++ Builder实用技术与典型案例》一书中所有的实例
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
    : TForm(Owner)
{
    ServerSocket1->Port=50;
    ServerSocket1->Active=true;
    m_iClientNum=0;
    m_sIsName="NA";
    m_sIsChat="CT";
    m_sPart="#";
    m_sIsCommand="CO";
    m_sTo="ALL";
    MenuListen->Enabled=false;
    MenuClose->Enabled=true;
    Application->OnException=AppException;
    TDateTime NowTime;
    NowTime=Now();
    StatusBar1->Panels->Items[2]->Text=NowTime.DateTimeString();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ServerSocket1Accept(TObject *Sender,
      TCustomWinSocket *Socket)
{
   AnsiString sClientNum;
   m_iClientNum++;
   sClientNum.sprintf("有%d台客户连接",ServerSocket1->Socket->ActiveConnections);
   StatusBar1->Panels->Items[1]->Text="连接成功!";

   StatusBar1->Panels->Items[0]->Text=sClientNum;
   ListUserAddr->Items->Add(Socket->RemoteAddress);
   for(int i=0;i<ServerSocket1->Socket->ActiveConnections;i++)
       ServerSocket1->Socket->Connections[i]->SendText("CLEAR");

   Sleep(100);
   
}

//---------------------------------------------------------------------------

void __fastcall TMainForm::ServerSocket1ClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
     AnsiString sTemp;
     AnsiString sPre;
     AnsiString sWelcome;
     sTemp=Socket->ReceiveText();
     sPre=sTemp.SubString(1,2);
     if(sPre==m_sIsName)
     {
        AnsiString sName;
        sName=sTemp.SubString(3,sTemp.Length()-2);
        ListUserName->Items->Add(sName);
        for(int i=0;i<ServerSocket1->Socket->ActiveConnections;i++)
        {
            for(int j=0;j<ListUserName->Items->Count;j++)
            {
                AnsiString sName;
                sName=ListUserName->Items->Strings[j];
                ServerSocket1->Socket->Connections[i]->SendText(sName);
                Sleep(10);
            }
            sWelcome=m_sIsChat+m_sPart;
            sWelcome+=AnsiString("大家欢迎(")+sName+AnsiString(") :) 的光临!( 服务器说:)");
            ServerSocket1->Socket->Connections[i]->SendText(sWelcome);
         }

     }
     if(sPre==m_sIsChat)
     {
        AnsiString sTo,sChat;
        int iPos;
        iPos=sTemp.Pos(m_sPart);
        sTo=sTemp.SubString(3,iPos-3);
        sChat=m_sIsChat+sTemp.SubString(iPos,sTemp.Length()-iPos+1);
        if(sTo==AnsiString("ALL") )
           for(int i=0;i<ServerSocket1->Socket->ActiveConnections;i++)
                ServerSocket1->Socket->Connections[i]->SendText(sChat);
        if(sTo!=AnsiString("ALL") )
        {
           int iIndex=ListUserName->Items->IndexOf(sTo);
           ServerSocket1->Socket->Connections[iIndex]->SendText(sChat);
        }

     }
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::AppException(TObject *Sender, Exception *E)

{
    Application->ShowException(E);
    Application->Terminate();
}

//---------------------------------------------------------------------------
void __fastcall TMainForm::ServerSocket1ClientDisconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
    AnsiString sTemp;
    sTemp.sprintf("%s断开连接!",Socket->RemoteAddress);
    StatusBar1->Panels->Items[1]->Text=sTemp;
    int iIndex;
    iIndex=ListUserAddr->Items->IndexOf(Socket->RemoteAddress);
    ListUserAddr->Items->Delete(iIndex);
    ListUserName->Items->Delete(iIndex);

}
//---------------------------------------------------------------------------

void __fastcall TMainForm::ServerSocket1ClientError(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
     ErrorCode=0;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::EdtSendKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
   if(Key==VK_RETURN)
   {
       AnsiString sTemp;
       sTemp=m_sIsChat+m_sPart+EdtSend->Text+AnsiString("(服务器说:)");
       if(m_sTo==AnsiString("ALL") )
           for(int i=0;i<ServerSocket1->Socket->ActiveConnections;i++)
                ServerSocket1->Socket->Connections[i]->SendText(sTemp);
        if(m_sTo!=AnsiString("ALL") )
        {
           int iIndex=ListUserName->Items->IndexOf(m_sTo);
           ServerSocket1->Socket->Connections[iIndex]->SendText(sTemp);
        }
        EdtSend->Clear();

    }
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::ListUserNameClick(TObject *Sender)
{
    m_sTo=ListUserName->Items->Strings[ListUserName->ItemIndex];
    LabelNotice->Caption=AnsiString("向")+m_sTo+AnsiString("发信息!");
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::BtnToAllClick(TObject *Sender)
{
    m_sTo="ALL";
    LabelNotice->Caption="向所有人发信息";
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::MenuDisConnectClick(TObject *Sender)
{
    if(m_sTo=="ALL")
    {
       AnsiString  sTemp;
       sTemp.sprintf("真的要断开与%s的连接吗?","所有人");
       if(MessageDlg(sTemp, mtConfirmation,
                      TMsgDlgButtons() << mbYes << mbNo, 0) ==mrYes)
           for(int i=0;i<ServerSocket1->Socket->ActiveConnections;i++)
                ServerSocket1->Socket->Connections[i]->Close();
    }
     if(m_sTo!="ALL")
     {
        AnsiString  sTemp;
        sTemp.sprintf("真的要断开与%s的连接吗?",m_sTo);
        if(MessageDlg(sTemp, mtConfirmation,
                      TMsgDlgButtons() << mbYes << mbNo, 0) ==mrYes)
        {
               int iIndex=ListUserName->Items->IndexOf(m_sTo);
                ServerSocket1->Socket->Connections[iIndex]->Close();
        }
     }

}
//---------------------------------------------------------------------------

void __fastcall TMainForm::MenuCloseClick(TObject *Sender)
{
   if(ServerSocket1->Active)
        ServerSocket1->Close();
   MenuListen->Enabled=true;
   MenuClose->Enabled=false;
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::MenuListenClick(TObject *Sender)
{
   if(!ServerSocket1->Active)
        ServerSocket1->Open();
   MenuListen->Enabled=false;
   MenuClose->Enabled=true;
}
//---------------------------------------------------------------------------


⌨️ 快捷键说明

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