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;

}

python C++包装类

  • 2015年12月18日 18:05
  • 541KB
  • 下载

SQLite_Wrapper_SQLite_C++包装类

  • 2010年08月30日 17:43
  • 7KB
  • 下载

《Java编程思想第四版》笔记---14章 附:包装类--装箱和拆箱

http://alexyyek.github.io/2014/12/29/wrapperClass/ JAVA的包装类 Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不...

SQLite3简单C++包装类源码示例

一个比较好的SQLite3 C++ wrapper包装类的通常思路是这样的: 数据库连接类,包含连接池,和sqlite3*,负责与数据库文件的连接问题; 一些create table,insert...
  • tao_627
  • tao_627
  • 2014年10月10日 17:43
  • 1460

简单C++线程池包装类源码示例

这里给出一个简单的C++线程池包装类,该lei
  • tao_627
  • tao_627
  • 2014年10月11日 14:50
  • 1278

C++沉思录读书笔记(23,24章)- 设计一个针对C接口的C++包装类

真理:使用C接口我们必须遵守它的一些隐藏约定,如果不遵守这些约定的话在程序运行时可能会出现奇怪的情况而导致失败,我们可以使用C++的数据抽象概念对C接口进行改进;对于C++而言,如果对某个类对象的所有...

dom4j解析struts.xml需要的包装类

  • 2015年07月17日 22:19
  • 2KB
  • 下载

Java包装类

  • 2016年09月19日 00:38
  • 492KB
  • 下载

关于Java包装类的理解

在学习了一段时间的Android之后,深知在Java基础体系中部分知识的缺失而使我在学习过程中碰到了许多不能理解的概念,就在最近,我打算重新学习Java语言的一些基础,就我现在大概几个星期系统的学习,...

Java 包装类

  • 2017年06月26日 22:18
  • 4KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:3.7 SOCK SAP C++包装类编程
举报原因:
原因补充:

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