flex客户端+vc服务端,实现配置文件修改
2011-07-27 22:04
696 查看
配置文件采用XML实现,简略xml文件test.xml如下:
这里,采用socket.writeUnsignedInt服务端则会收不到,另外发送加上'\n',是为了使服务端收到时进行一个结束的判断,由于不加,则发送RGB,收到RGB值时,末尾为问号??只是toString()发送,则收到为650074这种数字,不过数字位数不一定,也可能为250等3位数。
下面是服务端的的编写:
首先,新建基于对话框MFC的exe工程,这里命名为vcserver,注意勾选添加winsock支持:
其中,只有编辑框绑定CString类型m_str,用于显示收到RGB值,以检测收到的是否正确,其他按钮增加响应函数,不过这里写入文件的按钮并没有使用。
然后插入两个socket,CServerSocket,用于服务端监听,CClientSocket,用于接收客户端消息。
说到这里,顺便扯一句,以前写的socket编程什么的,都给忘了,去网上搜了很多,一个用windows SDK编写的倒是不错,不过SDK编程,确实不会啊,另外两个用CSocket写的还好,就借鉴了。
由于显示消息需要在主要Dlg当中,所以,socket的接收可以放到主Dlg文件的cpp中。于是另外2个socket的构造函数也就添加dlg类。这里vcserverDlg.h中需要包含另外2个socket的头文件,而另外2个socket也需要用到vcserverDlg成员,所以,在vcserverDlg.h中
socket的构造函数如下:(以CClientSocket为例,CServerSocket同样)需要注意的是,这里虽然命名为server,不过担任的是Listen的功能。
至此,RGB的发送搞定,下面就开始写入配置的xml文件了,MFC居然没有自带的xml操作类,后来经WJ同学推荐CMarkup类,上网搜了很多使用方法,不过将下载的Markup.h和Markup.cpp直接导入工程会编译出错 ,参考http://www.cppblog.com/totti1006/archive/2009/07/27/63672.html,知道在Markup.cpp的最开头加上#include "stdafx.h"。
说到这个,网上很多人都是抄的,还些到博客里,不过抄的很不详细,搞的我新用的就不清楚了,顺便说个,这票人,自己用过吗?不过,从另一个角度来看,博客园果然更可靠,访问貌似确实比csdn高。关于CMarkup类,更多消息可参考:http://www.firstobject.com/dn_markup.htm 。
下面,在CvcserverDlg.h中添加包含
另外,搞定xml文件,也可以用微软的msxml.dll,个人感觉用法像ado,还com接口什么的,生疼啊。可以参考http://apps.hi.baidu.com/share/detail/23347512和老王博客/article/7640472.html 。后来将Mr王博客里的代码在vs08里测试了下,编译通过,依旧以test.xml为例,不过最初输出不是那么满意:
where is my 汉字?想到了修改项目的语言支持。在项目->属性中,修改字符集为多字节,如下:
改为多字节后,结果正确了:
至此,搞定,下面也许是搞定多个连接的问题?也许是搞定自定义协议发送和接收以修改配置文件的问题,毕竟发送的内容不止RGB,再说吧,that is not important
菜鸟goes on ~~~
<?xml version="1.0" encoding="UTF-8"?> <Config> <typeid>001</typeid> <typename>调色板</typename> <rgb>cc33ff</rgb> </Config>由于flex不具有写文件的API,所以,将调色后的RGB以socket发送到服务器端,由服务端对文件进行修改,以使下次登录读取配置文件时,有保存的RGB值。flex客户端,发送RGB代码如下:
protected function ChangeHandler():void{ var brite:uint=slider.value; var adjustedColor:uint = ColorUtil.adjustBrightness(colorPicker.selectedColor, brite); box.setStyle("backgroundColor",adjustedColor); socket.writeUTFBytes(colorPicker.selectedColor.toString(16)+'\n');//得用string发送 socket.flush();//发送当前RGB值以测试,拖动条时会发送过多 trace(colorPicker.selectedColor.toString()); }
这里,采用socket.writeUnsignedInt服务端则会收不到,另外发送加上'\n',是为了使服务端收到时进行一个结束的判断,由于不加,则发送RGB,收到RGB值时,末尾为问号??只是toString()发送,则收到为650074这种数字,不过数字位数不一定,也可能为250等3位数。
下面是服务端的的编写:
首先,新建基于对话框MFC的exe工程,这里命名为vcserver,注意勾选添加winsock支持:
其中,只有编辑框绑定CString类型m_str,用于显示收到RGB值,以检测收到的是否正确,其他按钮增加响应函数,不过这里写入文件的按钮并没有使用。
然后插入两个socket,CServerSocket,用于服务端监听,CClientSocket,用于接收客户端消息。
说到这里,顺便扯一句,以前写的socket编程什么的,都给忘了,去网上搜了很多,一个用windows SDK编写的倒是不错,不过SDK编程,确实不会啊,另外两个用CSocket写的还好,就借鉴了。
由于显示消息需要在主要Dlg当中,所以,socket的接收可以放到主Dlg文件的cpp中。于是另外2个socket的构造函数也就添加dlg类。这里vcserverDlg.h中需要包含另外2个socket的头文件,而另外2个socket也需要用到vcserverDlg成员,所以,在vcserverDlg.h中
#include "ServerSocket.h" #include "lientSocket.h"在2个socket的头文件中,声明vcserverDlg类成员:
class CVcserverDlg;并增加成员
CVcserverDlg *m_pDlg;
socket的构造函数如下:(以CClientSocket为例,CServerSocket同样)需要注意的是,这里虽然命名为server,不过担任的是Listen的功能。
CClientSocket::CClientSocket(CVcserverDlg *pDlg) { m_pDlg = pDlg; }监听socket的OnAccept()函数需要重写,同样的,重写函数在vcserverDlg中
void CServerSocket::OnAccept(int nErrorCode) { CSocket::OnAccept(nErrorCode); m_pDlg->OnAccept(); }接收socket的OnReceive()也需要重写
void CClientSocket::OnReceive(int nErrorCode) { CSocket::OnReceive(nErrorCode); m_pDlg->OnReceive(this); }注意这里的this参数,则在CvcserverDlg中的OnReceive需要有CClientSocket参数:另外,需要添加2个socket指针成员,和上面显示的重写的OnAccept(),如下:
CServerSocket *m_kServerSocket; CClientSocket *m_csock; OnReceive(CClientSocket *); OnAccept();实现如下:
CVcserverDlg::OnAccept() { m_kServerSocket->Accept(*m_csock);//接收 MessageBox("one come ..."); } CVcserverDlg::OnReceive(CClientSocket *ps) { char m_buf[1024]; ps->Receive(m_buf,1024); int count=0; for (count = 0 ; count <1024 ; count++) { if (m_buf[count]=='\n') break; } m_buf[count]='\0'; //填充结束的,不然会是乱码 CString temp; temp.Format("%s",m_buf); strcpy(m_buf,temp.GetBuffer(temp.GetLength())); temp.ReleaseBuffer(); m_str = temp; //让m_str始终为当前RGB的CString表示 UpdateData(FALSE); } void CVcserverDlg::OnOK() { m_kServerSocket = new CServerSocket(this); if(!m_kServerSocket->Create(8001)) //建立监听套接字 { m_str = "*套接字建立失败!\r\n"; delete m_kServerSocket; UpdateData(false); return ; } if(!m_kServerSocket->Listen()) //建立监听 { m_str = "*套接字监听失败!\r\n"; delete m_kServerSocket; UpdateData(false); return ; } MessageBox("开始监听咯"); m_str = "server is starting"; UpdateData(FALSE); m_csock = new CClientSocket(this); } void CVcserverDlg::OnStop() { m_kServerSocket->Close(); delete m_kServerSocket; delete m_csock; m_kServerSocket = NULL; m_csock = NULL; MessageBox("服务已关闭"); } void CVcserverDlg::OnClear() { m_str = ""; UpdateData(FALSE); }
至此,RGB的发送搞定,下面就开始写入配置的xml文件了,MFC居然没有自带的xml操作类,后来经WJ同学推荐CMarkup类,上网搜了很多使用方法,不过将下载的Markup.h和Markup.cpp直接导入工程会编译出错 ,参考http://www.cppblog.com/totti1006/archive/2009/07/27/63672.html,知道在Markup.cpp的最开头加上#include "stdafx.h"。
说到这个,网上很多人都是抄的,还些到博客里,不过抄的很不详细,搞的我新用的就不清楚了,顺便说个,这票人,自己用过吗?不过,从另一个角度来看,博客园果然更可靠,访问貌似确实比csdn高。关于CMarkup类,更多消息可参考:http://www.firstobject.com/dn_markup.htm 。
下面,在CvcserverDlg.h中添加包含
#include "Markup.h"后来,考虑保存RGB直接放到退出前,则在退出响应函数中添加xml的写入内容:
void CVcserverDlg::OnCancel() {//还是退出前写比较实在 CMarkup xml; BOOL bLoadXml=FALSE; bLoadXml=xml.Load("test.xml"); if(bLoadXml) { CString str=_T(""); xml.ResetMainPos(); xml.FindElem(); xml.IntoElem(); while(xml.FindElem("rgb")) { str=xml.GetData(); MessageBox("ri"); xml.SetData(m_str);//SetData xml.Save("test.xml");//保存配置文件 break; } } CDialog::OnCancel(); }运行结果就是弹出窗口什么的,以及显示RGB值,就不给出图了,另外退出的时候,目前只是简单的用m_str替代文件中的rgb项目的值,在开始和结束的时候,都有对m_str修改的部分,需要小心,以后再完善。
另外,搞定xml文件,也可以用微软的msxml.dll,个人感觉用法像ado,还com接口什么的,生疼啊。可以参考http://apps.hi.baidu.com/share/detail/23347512和老王博客/article/7640472.html 。后来将Mr王博客里的代码在vs08里测试了下,编译通过,依旧以test.xml为例,不过最初输出不是那么满意:
where is my 汉字?想到了修改项目的语言支持。在项目->属性中,修改字符集为多字节,如下:
改为多字节后,结果正确了:
至此,搞定,下面也许是搞定多个连接的问题?也许是搞定自定义协议发送和接收以修改配置文件的问题,毕竟发送的内容不止RGB,再说吧,that is not important
菜鸟goes on ~~~
相关文章推荐
- SrpingCloud ---github上面如何使用webHook实现配置文件修改 ,客户端自动刷新
- WCF 安全机制 客户端和服务端配置文件
- raspbian安装Apache修改配置文件实现多站点
- VC++ UDP转TCP互发数据 UDP为服务端 TCP为客户端 可修改IP和端口最小化 2TCP/UDP中转
- plsql 通过修改配置文件的方式实现数据库的连接
- C# TCP实现多个客户端与服务端 数据 与 文件的传输
- c语言实现socket服务端/客户端通过tcp传送文件
- 通过修改 Apache 的配置文件 htaccess 文件实现自定义404页面
- 通过AutoConfig实现Form Server配置文件的修改
- Python实现在线上环境优雅的修改配置文件
- VB+PHP实现在线修改Windows服务器的配置文件
- C# 动态获取、修改、更新配置文件 实现思路
- VC++MFC下实现SOAP服务端和SOAP客户端
- 文件上传简单服务端和客户端 Java 实现
- VC/MFC实现版本的在线升级提示和下载(服务器配置文件的方法)
- [转载]C# TCP实现多个客户端与服务端 数据 与 文件的传输
- 动态修改WCF客户端配置文件终结点的地址的几种方法
- python socket上传文件的服务端和客户端实现
- C# 动态获取、修改、更新配置文件 实现思路
- logback动态修改配置文件实现打印不同级别日志