2013-03-15 77 views
0

我剛開始學習ACE。我嘗試了一些簡單的例子,並遇到了一個問題。這是我的代碼:接受與ACE_SOCK_Acceptor的連接

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; 
    .... 
} 

它總是返回-1當我打電話acceptor.open(...)。我對網絡編程有點新鮮。據我所知,代碼沒有任何問題。我正在用Wi-Fi在筆記本電腦上編程,這是否有所作爲?另外我打開了防火牆。 (試過把它關掉,沒有區別)。

這是服務器端程序。我必須以某種方式配置我的電腦嗎?

任何幫助,將不勝感激。

回答

0

Fyi,這裏有一個tutorials you can find online的列表。我會建議使用Reactor框架,一個例子是在$ ACE_ROOT \例子\反應堆\ 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; 
}