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

📄 mainunit.cpp

📁 这是一个使用UDP协议通信的例子程序
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <stdio.h>
#pragma hdrstop

#include "MainUnit.h"
#include INFO_H
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
    : TForm(Owner)
{
    server=NULL;
    Connect=false;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
    uvar32 err;

    server=new UDPSocket;

    server->startup();

    UpdateIPButtonClick(NULL);
    IPEdit->Text=HostIPComboBox->Items->Strings[0];
    
    CloseButton->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
   	server->cleanup();
    delete server;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::StartButtonClick(TObject *Sender)
{
    char str[256]="服务器启动失败!\n";

    if(server==NULL)
    {
        ShowMessage("服务器未建立成功!");
        return;
    }

    if(server->Create(IPEdit->Text.c_str(),PortEdit->Text.ToInt())==No)
    {
        strcat(str,server->GetErrorString());
        ShowMessage(str);

        return;
    }

    Connect=true;
    GameTimer->Enabled=true;

    StateText->Caption="开启";
    IPEdit->Enabled=false;
    PortEdit->Enabled=false;
    SelectIPButton->Enabled=false;
    StartButton->Enabled=false;
    WarringMax->Enabled=false;
    Max->Enabled=false;

    CloseButton->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::CloseButtonClick(TObject *Sender)
{
    if(Connect==false)
    {
        ShowMessage("服务器没有开启!");
        return;
    }

    GameTimer->Enabled=false;
    
    server->Close();
    Connect=false;

    StateText->Caption="未启动";

    IPEdit->Enabled=true;
    PortEdit->Enabled=true;
    SelectIPButton->Enabled=true;
    StartButton->Enabled=true;
    WarringMax->Enabled=true;
    Max->Enabled=true;

    CloseButton->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::SelectIPButtonClick(TObject *Sender)
{
    IPEdit->Text=HostIPComboBox->Items->Strings[HostIPComboBox->ItemIndex];
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::UpdateIPButtonClick(TObject *Sender)
{
    char str[256],**p;
    struct hostent *host;

    HostIPComboBox->Items->Clear();

    server->GetHostName(str);
    HostNameText->Caption=str;

    host=gethostbyname(str);
    p=host->h_addr_list;

    do
    {
        sprintf(str,"%d.%d.%d.%d",(*p)[0],(*p)[1],(*p)[2],(*p)[3]);
        HostIPComboBox->Items->Add(str);
    }while(*(++p)!=NULL);

    HostIPComboBox->ItemIndex=0;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::GameTimerTimer(TObject *Sender)
{
    if(Connect==false)return;

    char data[1024];
    uvar32 datasize;
    sockaddr addr;

    while(1)
    {
    	if((datasize=server->NBListen(data,1024,&addr))==0)return;

        server->Send(data,datasize,&addr);
        Memo->Lines->Add(data);
    }
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ClearLogButtonClick(TObject *Sender)
{
	Memo->Lines->Clear();	
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::SaveToTXTButtonClick(TObject *Sender)
{
	if(SaveDialog->Execute()==0)return;

    Memo->Lines->SaveToFile(SaveDialog->FileName);
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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