【问题标题】:Accepting a connection with ACE_SOCK_Acceptor接受与 ACE_SOCK_Acceptor 的连接
【发布时间】:2013-03-15 02:11:14
【问题描述】:

我刚开始学习 ACE。我尝试了他们的一些简单示例并遇到了问题。这是我的代码:

int _tmain(int argc, _TCHAR* argv[])
{
    ACE_INET_Addr server_addr;
    ACE_SOCK_Acceptor acceptor;
    ACE_SOCK_Stream stream;

    if(server_addr.set(8888) == -1) return 1;
    if(acceptor.open(server_addr, 1) == -1) return 1;
    ....
}

当我调用acceptor.open(...) 时它总是返回-1。我对网络编程有点陌生。据我所知,代码没有任何问题。我在带 Wi-Fi 的笔记本电脑上编程,这有什么不同吗?我也打开了防火墙。 (试过关掉,没区别)。

这是服务器端程序。我必须以某种方式配置我的计算机吗?

任何帮助将不胜感激。

【问题讨论】:

    标签: c++ network-programming ace


    【解决方案1】:

    仅供参考,这是tutorials you can find online 的列表。我会推荐使用 Reactor 框架,一个例子在 $ACE_ROOT\examples\Reactor\TP_Reactor

    但是说到你的问题,你不需要使用 set() 而是使用构造函数:

    #include <ace/ACE.h>
    #include <ace/SOCK_Acceptor.h>
    #include <ace/INET_Addr.h>
    #include <ace/Log_Msg.h>
    
    int main(int argc, char *argv[])
    {
      ACE_SOCK_Acceptor acceptor;
      ACE_INET_Addr server_addr(8888);
    
      // open a port using the acceptor; reuse the address later
      if (acceptor.open(server_addr, 1) == -1)
      {
        ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("%N:%l: Failed to open ")
                          ACE_TEXT ("listening socket. (errno = %i: %m)\n"), ACE_ERRNO_GET), -1);
      }
    
      // ...
    
      return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2017-05-26
      • 2011-04-15
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 2012-01-16
      • 2012-04-22
      相关资源
      最近更新 更多