找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3680|回复: 8

Reactor和MFC的问题

[复制链接]
发表于 2009-9-10 15:48:51 | 显示全部楼层 |阅读模式
我在MFC的对话框程序中用Reactor模式建立线程侦听连接,但我想发送信息,onsend里如何发送?
我声明了全局的clientService变量,clientService.peer().send().好像能发但客户端读不到,是不是因为线程的原因。
发表于 2009-9-11 09:04:36 | 显示全部楼层
建议楼主遇到问题的时候首先考虑一下,
如何将问题说明清楚,让听者可以比较容易的进入你的语境。
楼主,你看连clientService是什么类型,都不说明一下,这可让人如何分析呢。
 楼主| 发表于 2009-9-11 09:54:51 | 显示全部楼层

回复 #2 modern 的帖子

服务器就是APG第7章p110--p119的例子,客户端是p137--p141的例子

客户端:
在MFC的CPP里,OnConnect()里
{....
        Client client;
        pc = &client;
       if(connector.connect(pc,port_to_connect) == -1)
        ACE_ERROR_RETURN((LM_ERROR,
        ACE_TEXT ("%p\n"),
         ACE_TEXT ("connect")),1);
.....
}
所以我申请全局的CLIENT *PC;
然后在onsend()
{
     pc->peer().send(str,strlen(str));
}可以发送信息。

但是服务器端
在onStart()里
{
     ClientAcceptor clientAcceptor;
     clientAcceptor.reactor(ACE_Reactor::instance());
    if(clientAcceptor.open(port_listen) == -1)
        return -1;

}
但处理输入输出的是ClientService类,所以不知道OnSend()里如何处理ClientAcceptor和ClientServicede 关系才能像客户端那样用  ?.peer().send()来发送信息

modern,这样明白了吧...
发表于 2009-9-11 12:45:34 | 显示全部楼层
看APG7.2节
int
ClientAcceptor::handle_input (ACE_HANDLE)
{
  ClientService *client;
  ACE_NEW_RETURN (client, ClientService, -1);

  auto_ptr<ClientService> p (client);

  if (this->acceptor_.accept (client->peer ()) == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       ACE_TEXT ("(%P|%t) %p\n"),
                       ACE_TEXT ("Failed to accept ")
                       ACE_TEXT ("client connection")),
                      -1);
  p.release ();
  client->reactor (this->reactor ());
  if (client->open () == -1)
    client->handle_close (ACE_INVALID_HANDLE, 0);
  return 0;
}

在这里建立一个map就可以了,然后在楼主需要的时候,根据map的key索引到ClientService的指针,
然后楼主想怎么玩都行了。
 楼主| 发表于 2009-9-11 13:23:42 | 显示全部楼层

回复 #4 modern 的帖子

可以了。感谢modern大哥。
 楼主| 发表于 2009-9-14 09:14:47 | 显示全部楼层

回复 #4 modern 的帖子

这样的话,如果多个客户端连接,服务器发消息只有最后连接的那个客户端可以收到。
 楼主| 发表于 2009-9-14 09:34:23 | 显示全部楼层

回复 #6 psycheqiqi 的帖子

问题解决了,刚才指针数组出了问题。
 楼主| 发表于 2009-9-15 11:31:53 | 显示全部楼层

回复 #5 psycheqiqi 的帖子

我在传文件时,在接收端申请了一个buffer(假若4k)用来接受文件,但不管我传过去的文件多大(小于4K),内存给文件分配的空间都是4K。怎么解决?
 楼主| 发表于 2009-9-15 14:54:21 | 显示全部楼层

回复 #8 psycheqiqi 的帖子

我知道那是系统分配的
但我用buffer接受传文件的内容时,只能接收文本文件,别的格式的显示乱码?怎么解决
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-23 00:27 , Processed in 0.016277 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表