3.7 SOCK SAP C++包装类编程

原创 2006年05月24日 22:43:00

SOCK SAP实现的客户端

#include <ace/INET_Addr.h>
#include <ace/Time_Value.h>
#include <ace/SOCK_Connector.h>


static const int PORT_NUM = 10000;
static const int TIMEOUT = 5;

// SOCK_SAP Client.

template <class CONNECTOR>
void send_data(typename CONNECTOR::PEER_ADDR peer_addr)
{
 // Data transfer object.
 CONNECTOR::PEER_STREAM peer_stream;
 // Establish connection without blocking.
 CONNECTOR connector(peer_stream, peer_addr);


 /*if (peer_stream.get_handle() == NULL)
 {*/
  // If non-blocking connection is in progress,

  // wait up to TIMEOUT seconds to complete.

  /*ACE_Time_Value timeout(TIMEOUT);
  if (errno != EWOULDBLOCK ||connector.complete(peer_stream, &peer_addr, &timeout) == -1)
   perror ("connector");
  exit (1);*/
 /*}*/
 // Send data to server (send_n() handles
 // "short writes" correctly).
 char buf[BUFSIZ];
 for (int r_bytes;(r_bytes = read (0, buf, sizeof buf))>0;)
  peer_stream.send_n (buf, r_bytes);
 // Explicitly close the connection.
 peer_stream.close ();
}

int main (int argc, char *argv[])
{
 //char *host = argc > 1 ? argv[1]:"ics.uci.edu";
 //u_short port_num = htons (argc > 2?atoi (argv[2]):PORT_NUM);
 // Address of the server
 ACE_INET_Addr addr("10000","127.0.0.1");
 // Use SOCK SAP wrappers on client’s side.
 send_data<ACE_SOCK_Connector> (addr);
 return 0;
}

 

SOCK SAP实现的服务器端

#include <ace/INET_Addr.h>
#include <ace/Time_Value.h>
#include <ace/SOCK_Acceptor.h>


static const int PORT_NUM = 10000;

// SOCK_SAP Server.


template <class ACCEPTOR>
void recv_data (typename ACCEPTOR::PEER_ADDR addr)

{

 // Factory for passive connection establishment.

 ACCEPTOR acceptor(addr);

 // Data transfer object.

 ACCEPTOR::PEER_STREAM peer_stream;


 // Remote peer address.

 ACCEPTOR::PEER_ADDR peer_addr;

 // Performs iterative server activities.

 for (;;)

 {

  // Create a new STREAM endpoint

  // (automatically restarted if errno == EINTR).

  acceptor.accept (peer_stream, &peer_addr);

  printf ("client %s/n", peer_addr.get_host_name ());

  // Read data from client (terminate on error).

  char buf[BUFSIZ];

  for (int r_bytes = 0;;)

  {

   r_bytes = peer_stream.recv (buf, sizeof buf);

   if (r_bytes > 0)

    write (1, buf, r_bytes);

   else

    break;

  }

  // Close peer_stream endpoint

  // (acceptor endpoint stays open).

  peer_stream.close ();

 }

 /* NOTREACHED */

}

int main (int argc, char *argv[])

{

 u_short port_num = argc == 1 ? PORT_NUM : atoi (argv[1]);

 // Port for the server.

 ACE_INET_Addr addr (port_num);

 // Use Socket wrappers on server’s side.

 recv_data<ACE_SOCK_Acceptor> (addr);

 return 0;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

百度员工离职总结:如何做个好员工

2014年7月4日,我从百度离职了。   这是第一次,我不是因为和老板闹翻而离职;   这是第一次,我带着晋升的喜悦而离职;   这是第一次,我带着满满的收获而离职。   我曾...

好的产品经理是怎样炼成的?

摘要:最近在网上疯传《产品经理是条狗》,在现实生活中真有这么悲催吗?周鸿祎曾说过一名优秀的产品经理,最重要是具备强大的心理素质,不怕骂,而且善于从骂声中找到改善产品的机会。那么好的产品经理是如何炼成的...

并不是所有的程序员都适合做技术管理

摘要:这是曾经的技术高手,如今却是名职业经理人分享的内容。他称,相信很多程序员都想做管理,一方面是高薪,另一方面则是做管理很风光、工作也轻松,但实际上并不是所有人都适合做管理,技术和管理是两完全不同的...

从Perforce到Git的迁移

公司经过多次兼并、收购之后,开发团队使用的工具自然会出现鱼龙混杂的现象。就拿源代码管理工具来说,我们同时在使用的就有Perforce、Team Foundation、Subversion等。为了节省成...

从程序员到技术总监,分享10年开发经验

http://blog.csdn.net/smarttony/article/details/6697617 在中国有很多人都认为IT行为是吃青春饭的,如果过了30岁就很难有机会再发展下去!其实...

自动生成html文件

C# code using System; using System.Data; using System.Configuration; using System.Web; using System....

今天上班可以放羊

如果你受雇于谷歌,那你只须拿80%的时间用在本职工作上。而另外20%的时间,你可以用来做任何你想做的事情——前提是,你所做的事会以某种方式帮助谷歌进步。至少理论上是这样的。 到目前为止,谷歌的20%...

专访蒋宇捷:技术管理者应具备哪些能力?

编程初体验 CSDN:你何时开始接触计算机,又如何走上编程道路的? 蒋宇捷:小学的时候,父母单位的苹果机、386和586都可以让我在空闲时候使用。而在那时代彩色显示器非常少见,即使一个小小的黑白屏...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)