ACE学习笔记二(开发聊天程序)

这个简单的聊天程序包括如下功能:

1、接收所有发过来的消息  2、给指定ip地址发送消息

 

用的ACE类包括:ACE_INET_Addr,ACE_SOCK_Stream,ACE_SOCK_Connector,ACE_SOCK_Acceptor。

 

聊天程序建立步骤如下(VS2003):

1、建立MFC对话框项目,在项目的同级文件夹建立两个文件夹:inc,bin,其中inc中存放ace文件夹,bin文件夹中包括两个文件,ACED.dll,ACED.lib

2、配置项目属性:附加库目录为../bin,附加包含目录为../inc,附加依赖项为ACED.lib,项目输出文件为 ../bin/chat.exe。

3、在对话框上拖入控件如下:三个文本框,分别是聊天记录,IP地址,发送内容。一个发送按钮。

4、关键代码如下:

(1)包含头文件:

       #include "ace/SOCK_Stream.h"
       #include "ace/SOCK_Connector.h"
       #include "ace/INET_Addr.h"
       #include "ace/SOCK_Acceptor.h"

       在构造函数里面初始化ACE:ACE::init();

       在析构函数里面写:ACE::fint();

(2)接收消息:使用线程实现,该线程在初始化时候启动

        线程函数声明:static UINT _stdcall Thread_Recv_Msg(LPVOID lpParam);

        初始化启动线程:::AfxBeginThread((AFX_THREADPROC)Thread_Recv_Msg,NULL);

        线程实现函数:
 CClientDlg *dlg=(CClientDlg*)AfxGetApp()->GetMainWnd(); //主对话框指针

 ACE_INET_Addr ace_address;
 int iResult = ace_address.set(7777);//指定端口

 ACE_SOCK_Acceptor ace_acceptor;
 if(ace_acceptor.open(ace_address) == -1)
 {
  return 0;
 }
 ACE_SOCK_Stream ace_stream;
 while (true)
 {
  if(ace_acceptor.accept(ace_stream) == -1)
  {
   return 0;
  }
  const int SIZE = 1024;
  char str[SIZE];
  size_t s = ace_stream.recv(str,SIZE);
  char* pStr = new char[s];
  for(size_t i=0;i<s;i++)
   pStr[i] = str[i];
  CString strInfo;
  strInfo.Format("收到消息:%s",pStr);
  dlg->InsertRecord(strInfo);//将消息内容显示到聊天记录文本框
  delete []pStr;
 }
 return 1;

(3)发送消息:发送按钮的事件响应

 CString strIP;
 GetDlgItemText(IDC_EDIT_IP,strIP);
 ACE_INET_Addr addr(7777,strIP.GetBuffer());
 ACE_SOCK_Stream stream;
 ACE_SOCK_Connector con;
 int iResult = con.connect(stream,addr);//主动连接
 if(iResult != -1)
 {
  CString strContent;
  GetDlgItemText(IDC_EDIT_CONTENT,strContent);
  stream.send(strContent.GetBuffer(),strContent.GetLength());
  CString strInfo;
  strInfo.Format("发送消息:%s",strContent);
  InsertRecord(strInfo);//将发送的消息内容也显示到聊天记录文本框
 }

(4)InsertRecord的实现:

 CString strOldContent;
 GetDlgItemText(IDC_EDIT_RECORD,strOldContent);
 CString strNewContent;
 strNewContent.Format("%s%c%c%s",strOldContent,13,10,strRecord);
 SetDlgItemText(IDC_EDIT_RECORD,strNewContent);

 

 

测试:运行bin目录下的chat.exe程序,ip地址输入127.0.0.1,点击发送按钮

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值