-
c语言入门之如何利用C++ Builder 5.0 Enterprise 创建用
网络是一个激动人心的领域,编写网络上的应用程序更是很多程序员向往的情节,然而编写网络程序需要掌握大量的网络传输协议、编程接口和WinSock32 API 函数,正因为如此,要完成从Windows程序员到Web程序员的转变不是一件易事.最近笔者成功的用C++ Buil--der 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;
}
在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句柄添加如下代码:
void __fastcall TChatForm::ClientSocket1SeverRead(TObject *Sender, TCustomWinSo
cket *Socket)
{
//当作为客户器一端读来自服务器一端的数据时,激发该事件//
Memo2->Lines->Add(Socket->ReceiveText());
}
在SeverSocket1的ClientRead句柄添加如下代码
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocke
t *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通过。
一、 原理:网络聊天工具需要通过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;
}
在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句柄添加如下代码:
void __fastcall TChatForm::ClientSocket1SeverRead(TObject *Sender, TCustomWinSo
cket *Socket)
{
//当作为客户器一端读来自服务器一端的数据时,激发该事件//
Memo2->Lines->Add(Socket->ReceiveText());
}
在SeverSocket1的ClientRead句柄添加如下代码
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocke
t *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通过。
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式