C++Builder创建基于Internet点对点Chat

C++Builder创建基于Internet点对点Chat,第1张

C++Builder创建基于Internet点对点Chat,第2张

要创建基于互联网的应用程序,您可能会想到复杂的WinSock编程。但是C++ Builder3提供了一个新的WebBroker的互联网套件,其中TClientSocket和TServerSocket组件封装了Windows的相关API,大大简化了WinSock编程。要通过互联网传输数据,至少需要一对套接字,一个套接字在客户端,另一个套接字在服务器端。实际上,TClientSocket和TServerSocket组件并不是Socket对象,它们的属性Socket会返回各自的Socket对象。TClientSocket用于处理客户端和服务器之间的套接字连接,TServerSocket用于处理客户端发送的套接字连接。一旦客户机和服务器都连接到套接字,客户机和服务器就可以相互通信。
创建新项目以创建应用程序的用户界面:

1.将组件页面切换到Internet页面,并在表单上放置一个TServerSocket组件和一个TClientSocket组件,这样应用程序既可以是TCP/IP服务器,也可以是TCP/IP客户端。将Port属性设置为相同的值(如1000),并确保Socket之间的连接类型是非阻塞的。

2.在表单上放置两个TMemo组件,分别用于显示双方的通话内容,并将Memo2的ReadOnly属性设置为True。

3.在表单顶部放一个面板组件,上面放三个按钮:listen (btnlisten)、connect (btnconnect)和disconnect (btndisconnect)来启动相应的操作。

4.在表单底部放置一个StatusBar组件,将其SimplePanel属性设置为True,并在相应的事件处理程序中更改状态栏信息,让用户随时了解连接状态。

打开头文件,在form类的Private部分添加两个私有成员:bool IsServer字符串服务器.双方在交流时需要同时运行聊天程序。IsServer用于确定哪个聊天程序在服务器端,Server用于存储服务器的主机名。form类的构造函数如下:

fast call t form 1::t form 1(t component * Owner)
:t form(Owner)
{
is server = false;
Server = " localhost ";
}


这里服务器默认设置为localhost,这样就可以在没有联网的单台机器上调试程序。在Windows子目录中,您可以找到hosts.sam文件,其中定义了本地IP地址127.0.0.1的主机名:

本地主机.

void _ _ fast call t form 1::form create(to object * Sender)
{
btndisconnect--> Enabled = false;
}


程序运行后,如果用户按下“Monitor”按钮,程序将被设置到服务器端。此时TServerSocket的Active属性应该设置为True,这样服务器会自动进入监听状态。

void _ _ fast call t form 1::btnlistenClick(to object * Sender)
{
clientsocket 1-> Active = false;
server socket 1-> Active = true;
status bar 1--> simple text = " Listening ... ";
BTN listen--> Enabled = false;
BTN connect-> Enabled = false;
}


当用户按下“连接”按钮时,程序会弹出一个询问框,要求用户输入要连接的服务器的主机名,然后建立连接。

void _ _ fastcalltform 1::btnconnectclick(to object * sender)
{
if(输入查询("连接到服务器","输入服务器地址:",服务器)){
if(server . length()> 0)
clientsocket 1-> Active = true;
BTN listen--> Enabled = false;
BTN connect-> Enabled = false;
btndisconnect-> Enabled = true;
}
}
}


当用户发出连接请求时,客户端将触发OnCreate事件。程序会先在状态栏显示连接信息,然后清除显示对方对话内容的Memo2 空,准备开始对话。

void _ _ fastcalltform 1::clientsocket 1 connect(to object * sender,
tcustomwinsocket * socket)
{
status bar 1-> simple text = " connected to:"+Server;
memo 2-> Lines-> Clear();
}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C++Builder创建基于Internet点对点Chat

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情