[在线等]winston老大可在,我有简单问题请教!
设计思想:2个EDIT控件,分别接受两个信息,比如EDIT1控件:输入内容“1”,EDIT2控件:输入内容“2”,我想把 ”1“和”2“分别发到服务器上该如何处理呢?
客户端代码:
ACE_OS::strcpy(buf,CharString);
n=ACE_OS::strlen(buf);
//发送
if(new_stream.send_n(buf,n)!=n) ;;============问题出在这里,这里只能发一个EDIT控件内容出去,比如EDIT1控件内容“1”,我同时也想发EDIT2控件内容出去,该如何处理?
{
//发送失败
MessageBox(_T("发送失败"),_T("错误"),0);
}
服务端代码:
char recvuseridline;
//char sendline;
ACE_INET_Addr client_addr;
//handle由线程传入,实现new_stream与主线程中new_stream建立关联
new_stream.set_handle(handle);
new_stream.get_remote_addr(client_addr);
//接收客户端请求字符串
ssize_t n=new_stream.recv(recvuseridline,MAXLINE); ;;====================服务端代码这里也只能接受一个EDIT控件内容
老大,不要笑我问这么弱智的问题,针对本问题给我个思路或者简短的代码,让我思路开拓下,先谢过老大了!
论坛的内容我翻了边,Message_Block应该能合理处理这个问题,但根据卷1的思路就是想不出来改如何处理,希望老大针对这个问题指点下,帮我下,网上资料太少了... ...
[ 本帖最后由 marry 于 2008-11-21 19:46 编辑 ] :Q :Q默默的一直等。。。。。。。。。。。。。。 兄弟,我刚刚看到。
你的应用需求,跟ACE没什么关系。是对网络程序的设计问题。你必须自己去定义应用的协议,因为TCP只识别字节流,至于里面是什么,需要你自己去解析。
这样,对于你的需求,你可以定义一个结构。
比如前面4个字节是后续内容的长度,先读取长度,再继续读取后面的信息内容。你完全可以拼两个这样的结构来组合你的信息。
还有,用XML类型的结构。都是解决办法。
重复一遍,你必须对网络程序有深刻的理解和认识,你需要明白的内容,和ACE没啥关系。ACE只是一个框架,协助你完成复杂的网络程序开发和设计。 嗯,多谢老大,了解了!
经过老大指点,打破我个人认为ACE不需要构建协议就可以自由发送和接受,没有想到和TCPSOCKET编程基本原理一样,也是用自定义协议进行传送,比如下面代码
客户端:
//发送数据
send_cnt=peer.send_n ((char*)&this->m_frameDataBuf,FRAME_SIZE);
if(send_cnt!=FRAME_SIZE)
{
this->peer.close();
ACE_OS::strcat(this->lpMsg,"发送数据出错,可能网络故障!");
return false;
}
m_frameDataBuf就是我定义的结构体(自定义协议),,然后服务端也用同样的结构进行处理。。。
服务端:
if ((recv_cnt = this->sock_.recv_n (&(this->m_frameReceiveData), INPUT_SIZE)) !=INPUT_SIZE)//<= 0);;注意这里,接受整个m_frameReceiveData结构
{
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("(%P|%t) Connection closed\n"),recv_cnt));
return -1;
}
然后服务端可以用
m_frameReceiveData.eidt1进行数据库分解工作,
完毕,挺舒服的!再次感谢老大,希望这种思维对需要的人有所帮助,其实也是一般的解决方案!
[ 本帖最后由 marry 于 2008-11-24 11:31 编辑 ] 改掉你的签名吧。俺们受不了。。。
页:
[1]