Reactor和MFC的问题
我在MFC的对话框程序中用Reactor模式建立线程侦听连接,但我想发送信息,onsend里如何发送?我声明了全局的clientService变量,clientService.peer().send().好像能发但客户端读不到,是不是因为线程的原因。 建议楼主遇到问题的时候首先考虑一下,
如何将问题说明清楚,让听者可以比较容易的进入你的语境。
楼主,你看连clientService是什么类型,都不说明一下,这可让人如何分析呢。
回复 #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,这样明白了吧... 看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的指针,
然后楼主想怎么玩都行了。
回复 #4 modern 的帖子
可以了。感谢modern大哥。回复 #4 modern 的帖子
这样的话,如果多个客户端连接,服务器发消息只有最后连接的那个客户端可以收到。回复 #6 psycheqiqi 的帖子
问题解决了,刚才指针数组出了问题。回复 #5 psycheqiqi 的帖子
我在传文件时,在接收端申请了一个buffer(假若4k)用来接受文件,但不管我传过去的文件多大(小于4K),内存给文件分配的空间都是4K。怎么解决?回复 #8 psycheqiqi 的帖子
我知道那是系统分配的但我用buffer接受传文件的内容时,只能接收文本文件,别的格式的显示乱码?怎么解决
页:
[1]