求助....
我编了ACE程序员指南的第六章的例子,运行结果客户端 connect:connection refused
服务器 waiting forconnection:connection timed out.....
为什么不能传数据? connection refused...
连接被拒绝了,还怎么传数据呀!
ACE很多测试程序都是需要手动输入参数的,
仔细看一下代码是不是参数没有设置正确。
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);
}
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);
}
回复 #2 modern 的帖子
这就是那个SERVER和CLIENT的代码,什么地方出错了?回复 #2 modern 的帖子
我用的ACE 5.5 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的代码,确实都是这么写的。
没想通为什么要这么写,确实很迷惑人。
回复 #7 modern 的帖子
客户端显示了uptime正确了但服务器显示<127.0.0.1:3631:no error|3576>connection from|?
connection from的信息没有显示出来.....
回复 #8 psycheqiqi 的帖子
问题解决了,前面的就是只不过它用了%P%T
回复 #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]