ACE学习笔记一(基本的TCP/IP Socket用法)

来源:互联网 发布:spring mvc源码 编辑:程序博客网 时间:2024/05/16 07:14
1.基本的概念

连接器(Connector):主动建立连接ACE_SOCK_Connector

接收器(acceptor):被动建立连接ACE_SOCK_Acceptor

流(Stream):传输数据ACE_SOCK_Stream
地址(address ):定义对端点的寻址手段ACE_INET_Addr
//////////////////////////////////////////////////////////
2.一个简单的客户端的创建方法
(1)创建一个ACE_Sock_Addr,用这个创建的地址来进行连接相应的Socket
(2)ACE使用ACK_SOCK_Stream对象表示已经连接的TCPSocket,为了主动的使用ACE_Sock_Stream连接到服务器,需要使用ACE_Sock_Connector和已经构造好的ACE_INET_Addr:
ACE_SOCK_Addr srvr(50000,ACE_LOCALHOST);//定义待连接的对端的地址
ACE_SOCK_Connector connector;
ACE_SOCK_Stream peer;
If(-1 == connector.connect(peer,srvr))
{
ACE_ERROR_RETURN((LM_ERROR,ACE_TEXT(%p\n”),ACE_TEXT(“Connect”)),1);
}
Connect的参数是:要连接的流对象,以及它应该连接到的流地址。
(3)如果连接成功,ACE_SOCK_Stream就会进入相应的连接状态,用来进行和服务器进行通讯

peer.send_n(“update\n”,7);
bc = peer.recv(buf,sizeof(buf));
write(1,buf,bc);
peer.close();
关于connect()函数、send_n函数、recv_n函数对于超时的处理可以使用相应的ACE_Time_Value进行指定
///////////////////////////////////////////////////
3.创建一个简单的服务器
(1)创建一个ACE_INET_Addr定义想要进行侦听的接口
(2)使用ACE_SOCK_Acceptor对象在该端口上打开一个侦听器

ACE_INET_Addr port_to_listen(50000);
ACE_SOCK_Acceptor acceptor;
If(acceptor.open(port_to_listen,1)==-1)
ACE_ERROR_RETURN((LM_ERROR,ACE_TEXT(“%p\n”),ACE_TEXT(“acceptor.opn”)),100);

(3) 一旦定义了地址,并打开了用于监听新连接的接收器,就要等待那些新的连接的到达。这是通过Accept()方法完成的。
If(acceptor.accept(peer,&peer_addr,&time_out,0)==-1)
{
   //提示相应的信息
}

(4)连接建立成功以后,peer_addr中将会填写相应的对端的IP地址和端口号,下面就可以进行相应的通信了
0 0