关于ACE Socket编程问题(附源码)
客户端代码:#include "ace/INET_Addr.h"
#include "ace/SOCK_Stream.h"
#include "ace/Log_Msg.h"
#include "ace/SOCK_Connector.h"
#include "ace/OS.h"
int ACE_TMAIN(int, ACE_TCHAR* [])
{
ACE_INET_Addr srvr(50000, ACE_LOCALHOST);
ACE_SOCK_CONNECTOR connector;
ACE_SOCK_Stream peer;
if (connector.connect(peer, srvr) == -1) // 发送数据前建立连接,发送成功后发送第二条数据失败!
return -1;
int bc = 0, i = 0;
char buf = {0};
ssize_t bytes_sended = 0;
while (1)
{
// if (connector.connect(peer, srvr) == -1) // 每次发送数据前建立连接 OK
// return -1;
char data = {0};
ACE_OS::sprintf(data, "uptime-%d", i);
bytes_sended = peer.send_n(data, ACE_OS::strlen(data));
if (bytes_sended < 0)
{
int error = ACE_OS::last_error();
continue;
}
bc = peer.recv(buf, sizeof(buf));
ACE_DEBUG((LM_INFO, "receive from server data is [%s]\n", buf));
ACE_OS::sleep(10);
i++;
//peer.close();
bytes_sended = 0;
bc = 0;
}
peer.close();
return 0;
}
服务端代码:
#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(50000);
ACE_SOCK_Acceptor acceptor;
if (acceptor.open(port_to_listen, 1) == -1)
return -1;
while (1)
{
ACE_SOCK_Stream peer;
ACE_INET_Addr peer_addr;
ACE_Time_Value timeout(10, 0);
if (acceptor.accept(peer, &peer_addr) == -1)
{
break;
}
else
{
ACE_TCHAR peer_name = {0};
peer_addr.addr_to_string(peer_name, 256);
ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) Connection from %s\n"), peer_name));
ssize_t bytes_received = 0;
char buffer = {0};
bytes_received = peer.recv(buffer, sizeof(buffer));
if (bytes_received > 0)
{
ACE_DEBUG((LM_INFO, "receive data is : [%s]\n", buffer));
peer.send_n(buffer, bytes_received);
}
peer.close();
}
}
return 0;
}
我先问问大侠们,客户端对于ACE的 ACE_SOCK_CONNECTOR 每次在send_n时候都需要先建立连接后,才能往客户段发送数据,难道没有建立常连接后,发送数据,也就是说建立一次连接,然后不停发送数据?不知是不是我的使用方式有误,请坛友们指点!谢谢(注意红色部分,当每次发送数据都建立连接,则程序正常) 你写错了。peer.close();
tcp链接是你自己关闭的,ACE在忠实的执行你要求的操作。 好意思,那个写错了peer.close();应该在while循环外。
同样的存在问题,不知何故?哪位大侠能讲解下原理,谢谢了! accept阻塞了,移到while循环外面就ok!
页:
[1]