c/c++在liunx网络环境下的应用程序开发是一个复杂的问题,在这个开源环境内学习网络编程对于强化程序员的网络构架知识很有帮助。
这么大的题目,里面的文章当然不会少,这里从c/c++上的一个著名的网络开发框架ACE开始,逐个题目展开,和各位好友一起了解网络高性能程序的重要知识。
ACE在百度查一查,词目解释是:
INSTALL_PREFIX = /usr/local #具体路径可以调整
接下来只要在wrappers,就是解压的根目录下运行make即可,不过那样会make出来很多东西,如果只想make动态链接库可以用下面的办法:
LIBS += -L/home/gxx/Codes/ACE/lib -lACE
INCLUDEPATH += /home/gxx/Codes/ACE/include
#include "ace/ACE.h"
#include "ace/Log_Msg.h"
#include "ace/INET_Addr.h"
#include "ace/SOCK_Connector.h"
#include "ace/SOCK_Stream.h"
#include "ace/SOCK_Acceptor.h"
main(int argc, char* argv[])
{
char buf[100];
ACE::init(); //调用ACE的静态方法,初始化ACE
ACE_INET_Addr PeerAddr; //该类主要封装了C SOCKET 的地址对象,通过外观封装的模式,把struct sockaddr_in封装在内。方便用户的操作。
if (PeerAddr.set(5050)==-1) //设定端口
return 1;
ACE_SOCK_Acceptor PeerAcceptor; //用于被动连接的建立,基于BSD accept()和listen()调用,对应的是客户端的ACE_SOCK_Connect PeerConnect
ACE_SOCK_Stream PeerStream;// 数据流,是ACE中Accepotr与Connect交互信息的中间介质
if (PeerAcceptor.open(PeerAddr,1) == -1)
throw "Address is error!";
if (PeerAcceptor.accept(PeerStream)==-1) //设定数据流与TCPIP监视者之间链接
return 1;
PeerStream.disable(ACE_NONBLOCK); //设定阻塞或者非阻塞模式 , 阻塞模式下recv函数会持续等待直到获取指定数量的数据,非阻塞模式立刻返回结果
PeerStream.recv(buf,100); //获取100字节的信息,
cout << buf << endl;
PeerStream.send("Get Msg",10);
PeerStream.close();
ACE::fini();
}
与Server端对应的是client端的connector,代码类似与Server端,需要注意的是,客户端connector需要指明服务端ip
//client.cpp
main()
{
ACE::init();
ACE_SOCK_Connector PeerConnector;
ACE_INET_Addr PeerAddr(5050,"127.0.0.1");//127.0.0.1表示本机通信,这个和Server端的Address设置略有不同,因为这里的ip表示对方ip,而Accptor
//是负责搜索本机端口的,所以没必要设置位搜索其他ip
ACE_SOCK_Stream PeerStream;
if (PeerConnector.connect(PeerStream,PeerAddr)==-1)
exit(0);
PeerStream.send("I am client",11);//链接成功后客户端会发送一小端信息,之后就关闭链接了。
PeerStream.close();
ACE::fini();
}