虽然之前也在linux下写过select服务,但是用ACE还是第一次,把一些心得写下来。算是milestone吧。首先ACE相关库的下载安装我就不多废话,先说说程序的框架,该服务器分服务端和客户端。服务端的主线程负责监听新的连接,同时另起一个线程去处理数据。客户端很简单,就负责发送数据。
服务端的主线程(负责新连接的监听):
#define PORT "1234"
void *pthread_function(void *pArg); //监听客户端发送的数据
int handle_data(ACE_SOCK_Stream stream); //处理客户端stream的数据
ACE_Handle_Set handle_set;
std::map<std::string , ACE_SOCK_Stream> STRING_STREAM;//string - ACE_SOCK_Stream 名值对
//using namespace ACE;
int main(int argc , char *argv[])
{
ACE_SOCK_Acceptor acceptor;
ACE_SOCK_Stream local_stream , remote_stream;
ACE_INET_Addr local_inet_addr , remote_inet_addr;
local_inet_addr.set(atoi(PORT));
acceptor.open(local_inet_addr , 1);
//1 代表设置接受者(acceptor)socket的SO_REUSEADDR,允许程序停止后重新启动,避免和前一次timeout的socket发生冲突
handle_set