psycheqiqi 发表于 2009-8-21 11:35:51

求助....

我编了ACE程序员指南的第六章的例子,运行结果
客户端 connect:connection refused
服务器 waiting forconnection:connection timed out.....

为什么不能传数据?

modern 发表于 2009-8-21 12:45:40

connection refused...
连接被拒绝了,还怎么传数据呀!
ACE很多测试程序都是需要手动输入参数的,
仔细看一下代码是不是参数没有设置正确。

psycheqiqi 发表于 2009-8-21 13:52:32

server

server.cpp

#include "ace/INET_Addr.h"
#include "ace/SOCK_Stream.h"
#include "ace/SOCK_Acceptor.h"
#include "ace/LOG_Msg.h"
#include "ace/Time_Value.h"

int ACE_TMAIN(int, ACE_TCHAR *[])
{
ACE_INET_Addr port_to_listen ("HAstatus");
ACE_SOCK_Acceptor acceptor;
if (acceptor.open(port_to_listen, 1)==-1)
ACE_ERROR_RETURN((LM_ERROR,
                  ACE_TEXT ("%p\n"),
      ACE_TEXT ("acceptor.open")),
      100);
int open(const ACE_Addr &local_sap,
       int reuse_addr = 0,
    int protocol_family = PF_INET,
    int backlog = ACE_DEFAULT_BACKLOG,
    int protocol = 0);

while(1)
{
ACE_SOCK_Stream peer;
ACE_INET_Addr peer_addr;
ACE_Time_Value timeout (10,0);
#if 0
if (acceptor.accept (peer) == -1)
   ACE_ERROR_RETURN((LM_ERROR,
                        ACE_TEXT (" (%p|%t) Failed to accept "),
                     ACE_TEXT ("client connection\n")),
         100);
#endif
if(acceptor.accept (peer, &peer_addr, &timeout, 0)== -1)
{
   if(ACE_OS::last_error() == EINTR)
    ACE_DEBUG ((LM_DEBUG,
                ACE_TEXT ("(%p|%t) Interrupted while "),
       ACE_TEXT ("waiting for connection\n")));
   else
    if(ACE_OS::last_error() == ETIMEDOUT)
   ACE_DEBUG ((LM_DEBUG,
               ACE_TEXT ("(%p|%t) Timeoout while "),
            ACE_TEXT ("waiting for connection\n")));


}
else
{
   const int MAXHOSTNAMELEN=32;
   ACE_TCHAR peer_name ;
            peer_addr.addr_to_string(peer_name, MAXHOSTNAMELEN);                                                                                  peer_addr.addr_to_string (peer_name,MAXHOSTNAMELEN);
   ACE_DEBUG ((LM_DEBUG,
            ACE_TEXT (" (%p|%t) Connection from %s \n"),
      peer_name));
   char buffer;
   ssize_t bytes_received;
   while((bytes_received = peer.recv (buffer, sizeof(buffer))) !=1)
   {
    peer.send_n (buffer, bytes_received);
   }
   peer.close();
}
}
return(0);
}

psycheqiqi 发表于 2009-8-21 13:53:26

client

#include "ace/INET_Addr.h"
#include "ace/SOCK_Stream.h"
#include "ace/SOCK_connector.h"
#include "ace/LOG_Msg.h"
#include "stdio.h"
//#pragma comment(lib,"ws2_32")
int ACE_TMAIN(int, ACE_TCHAR *[])
{
ACE_INET_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);
int bc;
char buff;

peer.send_n ("uptime\n",7);
bc=peer.recv (buff,sizeof(buff));
write (1, buff, bc);
peer.close();
return(0);
}

psycheqiqi 发表于 2009-8-21 13:54:39

回复 #2 modern 的帖子

这就是那个SERVER和CLIENT的代码,什么地方出错了?

psycheqiqi 发表于 2009-8-21 14:04:48

回复 #2 modern 的帖子

我用的ACE 5.5

modern 发表于 2009-8-21 14:38:45

1.看Server.cpp这段代码ACE_INET_Addr port_to_listen ("HAstatus");
测试了一下,由于指定的字符串并不能被识别,所以每次Server都会随机的监听一个端口。
你的客户端连接本机的端口50000,当然连接不上了。
你应该指定一个具体的端口号,如这么写ACE_INET_Addr port_to_listen (50000);
这是客户端 connect:connection refused的原因。
2.服务提示的错误明显是监听超时了,仔细看代码。
3.我查了一下书的第六章,以及ACE的代码,确实都是这么写的。
没想通为什么要这么写,确实很迷惑人。

psycheqiqi 发表于 2009-8-21 14:54:05

回复 #7 modern 的帖子

客户端显示了uptime正确了
但服务器显示<127.0.0.1:3631:no error|3576>connection from|?
connection from的信息没有显示出来.....

psycheqiqi 发表于 2009-8-21 15:39:09

回复 #8 psycheqiqi 的帖子

问题解决了,前面的就是
只不过它用了%P%T

psycheqiqi 发表于 2009-8-24 16:55:50

回复 #7 modern 的帖子

server端的ACE_INET_Addr port_to_listen ("HAstatus")这么写的原因?
因为在前面的一节 給客户增加健壮性里它增加了
ACE_INET_Addr addr;
addr.set ("HAStatus", ACE_LOCALHOST);
addr.set ("HAog",ACE_LOCALHOST);
页: [1]
查看完整版本: 求助....