操作CB建设用户本身的网上谈天措施
当前位置:以往代写 > C/C++ 教程 >操作CB建设用户本身的网上谈天措施
2019-06-13

操作CB建设用户本身的网上谈天措施

操作CB建设用户本身的网上谈天措施

副标题#e#

网络是一个冲感人心的规模,编写网络上的应用措施更是许多措施员憧憬的情节,然而编写网络措施需要把握大量的网络传输协议、编程接口和WinSock32 API 函数,正因为如此,要完成从Windows措施员到Web措施员的转变不是一件易事.最近笔者乐成的用C++ Builder 5.0 Enterprise 版编写出了网上谈天措施,特先容如下:

一、道理:网络谈天东西需要通过TCP/IP协议,因此可以把网络谈天措施分为处事器端和客户器端两部门,个中 处事器端用以把措施转换成一个虚拟的 TCP/IP 处事器. 而且和指定的客户机成立毗连,在毗连乐成后,向指定的客户器发送和吸收数据;客户器端把措施转换成一个虚拟的TCP/IP 客户器,而且向指定的处事器发出毗连信号,在毗连乐成后,向指定的处事器发送和吸收数据。在C++ Builder 5.0 情况下处事器端和客户器端的成果别离由TServerSocket控件和TClientSocket 控件加以实现。个中TCP/IP协议以包括在控件的属性中,因此只要正确填入属性,便可实现网上通讯。

二、详细实现:首先`在C++ builder 5.0 情况下成立一个Application ,并生存为Project1。在Form1 上添加如下控件,并配置相关属性,个中Memo2于显示对方传来的信息,个中Memo1用于显示传给对方的信息:

控件名称         属性         值

Tbevel         Caption       Bevel1

TSpeedButton     Caption       SpeedButton1

Tmemo         Caption       Memo1

Tmemo         Caption       Memo2

TMainMenu       Caption       MainMenu1

TServerSocket     Caption       ServerSocket1

TClientSocket     Caption      ClientSocket1

同时在 MainMenu1控件中增加 三个菜单项,其属性为

Name                 Caption  

Connect               毗连

Disconncet              断开

Listin                监听

在Unit1 的Private中添加:

bool   IsServer;

String  Server;

在Connect 的Click句柄添加如下代码:

void __fastcall TForm1::ConnectClick(Tobject *Sender)
{
if (ClientSocket1->Active){ ClientSocke1t->Active = false;} // 判定是否以毗连,如毗连则断开毗连//
if (InputQuery("Computer to connect to", "添入要毗连的呆板的IP地点:", Server))
{
   if (Server1.Length() > 0)//判定用户是否已经添入//
   {
     ClientSocket-1>Host = Server;//配置要毗连的IP地点为用户指定的IP地点值//
     ClientSocket1->Active = true;//举办毗连//
   }
}
}

在Listen的Click句柄添加如下代码:

void __fastcall Form1 ::ListenClick(Tobject *Sender)
{
Listen->Checked = !Listen->Checked;
if (Listen->Checked)
   ServerSocket1->Active = true;//处事器端监听来自客户器断的信号//
else
   ServerSocket1->Active = false;
}


#p#副标题#e#

在Disconnect 的Click句柄添加如下代码:

void __fastcall TForm1::ExitClick(Tobject *Sender)
{
ServerSocket1->Close();//封锁处事器端//
ClientSocket1->Close();//封锁客户器端//
Close();
}

在Memo1 的KeyDown句柄添加如下代码:

void __fastcall TForm1::Memo1KeyDown(Tobject *Sender, WORD &Key,
   TShiftState Shift)
{
if (Key == VK_RETURN)
{
   if (IsServer)
     {ServerSocket->Socket->Connections[0]->SendText(
     Memo1->Lines->Strings[Memo1->Lines->Count – 1]); }//作为处事器一端发送数据//
   else
   { ClientSocket->Socket->SendText(Memo1->Lines->Strings[
     Memo1->Lines->Count -1]);}//作为客户器一端发送数据//
}
}

在ClientSocket1的Connect句柄添加如下代码:

void __fastcall TForm1::ClientSocket1Connect(Tobject *Sender , TCustomWinSocke
t *Socket)
{//当用户和长途处事器毗连乐成后,引发该事件//
StatusBar1->Panels->Items[0]->Text = "Connect to: " + Socket->RemoteHost;
}

在ClientSocket1的Error句柄添加如下代码:

void __fastcall TForm1::ClientSocket1Error(Tobject *Sender,TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{ //当用户和长途处事器毗连失败后,引发该事件//
Memo2->Lines->Add("Error connecting to:" + Server);
ErrorCode = 0;
}

在ClientSocket1的Read句柄添加如下代码:

#p#分页标题#e#

void __fastcall TChatForm::ClientSocket1SeverRead(Tobject *Sender, TCustomWinSocket *Socket)
{
//看成为客户器一端读来自处事器一端的数据时,引发该事件//
Memo2->Lines->Add(Socket->ReceiveText());
}

在SeverSocket1的ClientRead句柄添加如下代码

void __fastcall TForm1::ServerSocket1ClientRead(Tobject *Sender, TCustomWinSocket *Socket)
{
//看成为客户器一端读来自处事器一端的数据时,引发该事件//
Memo2->Lines->Add(Socket->ReceiveText());
}

在SeverSocket1的Accept句柄添加如下代码

void __fastcall TForm1::ServerSocket1Accept(Tobject *Sender, TCustomWinSocket
*Socket)
{ //当处事器乐成的监听到来自客户器的信号后,引发该事件//
IsServer = true;
StatusBar1->Panels->Items[0]->Text = "Connect to: " + Socket->RemoteAddress;
}

在Form1的Create句柄添加如下代码:

void __fastcall TForm1::Form1Create(Tobject *Sender)
{
   IsServer=false;
}

注:“//”为注释.

以上措施C++ Builder 5.0Enterprise通过。

    关键字:

在线提交作业