﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-网络软件开发</title><link>http://www.cppblog.com/ghslinux/</link><description>网络软件开发，vc ++ 、linux 、asp、sql server 2000
android、iOS</description><language>zh-cn</language><lastBuildDate>Wed, 08 Apr 2026 18:29:04 GMT</lastBuildDate><pubDate>Wed, 08 Apr 2026 18:29:04 GMT</pubDate><ttl>60</ttl><item><title>SkinEngine控件安装方法</title><link>http://www.cppblog.com/ghslinux/archive/2008/05/07/49077.html</link><dc:creator>信任</dc:creator><author>信任</author><pubDate>Tue, 06 May 2008 17:45:00 GMT</pubDate><guid>http://www.cppblog.com/ghslinux/archive/2008/05/07/49077.html</guid><wfw:comment>http://www.cppblog.com/ghslinux/comments/49077.html</wfw:comment><comments>http://www.cppblog.com/ghslinux/archive/2008/05/07/49077.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ghslinux/comments/commentRss/49077.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ghslinux/services/trackbacks/49077.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: SkinEngine控件是一组用于优化界面设计可视化控件,它重写了大部分可视化组件的源代码,使其外观更为美观漂亮,美化了程序界面的设计,使得程序员可以把更多的精力放在系统软件功能的设计上.<br>      首先从网上下载SkinEngine控件的安装包,我下载的是3.4.7版本,下载以后发现这个控件的安装竟然是windows的软件安装方式(而不是delphi安装第三方控件的安装包方式),安装后发现系统的程序菜单多了一项SkinEngine<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/ghslinux/archive/2008/05/07/49077.html'>阅读全文</a><img src ="http://www.cppblog.com/ghslinux/aggbug/49077.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ghslinux/" target="_blank">信任</a> 2008-05-07 01:45 <a href="http://www.cppblog.com/ghslinux/archive/2008/05/07/49077.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MD5算法(C++实现) </title><link>http://www.cppblog.com/ghslinux/archive/2008/05/03/48715.html</link><dc:creator>信任</dc:creator><author>信任</author><pubDate>Sat, 03 May 2008 09:26:00 GMT</pubDate><guid>http://www.cppblog.com/ghslinux/archive/2008/05/03/48715.html</guid><wfw:comment>http://www.cppblog.com/ghslinux/comments/48715.html</wfw:comment><comments>http://www.cppblog.com/ghslinux/archive/2008/05/03/48715.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ghslinux/comments/commentRss/48715.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ghslinux/services/trackbacks/48715.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: /******************************************************************************<br> *  Copyright (C) 2000 by Robert Hubley.                                      *<br> *  All rights reserved.                                                      *<br> *                                                                            *<br> *  This software is provided ``AS IS'' and any express or implied            *<br> *  warranties, including, but not limited to, the implied warranties of      *&nbsp;&nbsp;<a href='http://www.cppblog.com/ghslinux/archive/2008/05/03/48715.html'>阅读全文</a><img src ="http://www.cppblog.com/ghslinux/aggbug/48715.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ghslinux/" target="_blank">信任</a> 2008-05-03 17:26 <a href="http://www.cppblog.com/ghslinux/archive/2008/05/03/48715.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IM软件的界面网络部分（-）</title><link>http://www.cppblog.com/ghslinux/archive/2006/08/05/10863.html</link><dc:creator>信任</dc:creator><author>信任</author><pubDate>Sat, 05 Aug 2006 06:19:00 GMT</pubDate><guid>http://www.cppblog.com/ghslinux/archive/2006/08/05/10863.html</guid><wfw:comment>http://www.cppblog.com/ghslinux/comments/10863.html</wfw:comment><comments>http://www.cppblog.com/ghslinux/archive/2006/08/05/10863.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/ghslinux/comments/commentRss/10863.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ghslinux/services/trackbacks/10863.html</trackback:ping><description><![CDATA[       一直以来都想有自己的即时通讯软件，所以也一直致力于即时通讯软件的开发。今天完成的是软件的两个界面。拿出来给大家看看，哈哈：)<br />     欢迎交流哦。<br />     软件登录界面：<img src="http://img.poco.cn/mypoco/myphoto/20060805/2486345220060805140256060.jpg" /><br /><br />     软件登录成功页面：<img src="http://img.poco.cn/mypoco/myphoto/20060805/2486345220060805135811072.jpg" /><img src ="http://www.cppblog.com/ghslinux/aggbug/10863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ghslinux/" target="_blank">信任</a> 2006-08-05 14:19 <a href="http://www.cppblog.com/ghslinux/archive/2006/08/05/10863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>类似QQ、淘宝旺旺的网页代码 </title><link>http://www.cppblog.com/ghslinux/archive/2006/08/04/10835.html</link><dc:creator>信任</dc:creator><author>信任</author><pubDate>Fri, 04 Aug 2006 03:46:00 GMT</pubDate><guid>http://www.cppblog.com/ghslinux/archive/2006/08/04/10835.html</guid><wfw:comment>http://www.cppblog.com/ghslinux/comments/10835.html</wfw:comment><comments>http://www.cppblog.com/ghslinux/archive/2006/08/04/10835.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ghslinux/comments/commentRss/10835.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ghslinux/services/trackbacks/10835.html</trackback:ping><description><![CDATA[      当我们在网页上看到关于QQ或是淘宝旺旺的在线连接的时候，点击那个连接的时候，会判断你的系统里是否装了该软件，如果装了则弹出聊天窗口；如果没有安装则提示你去安装。<br />       这个效果用到了 ActiveX控件等。我是用asp和ActiveX实现该功能的，其中也用到了Javascript脚本语言。<img src ="http://www.cppblog.com/ghslinux/aggbug/10835.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ghslinux/" target="_blank">信任</a> 2006-08-04 11:46 <a href="http://www.cppblog.com/ghslinux/archive/2006/08/04/10835.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC socket程序开发</title><link>http://www.cppblog.com/ghslinux/archive/2006/07/27/10578.html</link><dc:creator>信任</dc:creator><author>信任</author><pubDate>Thu, 27 Jul 2006 04:05:00 GMT</pubDate><guid>http://www.cppblog.com/ghslinux/archive/2006/07/27/10578.html</guid><wfw:comment>http://www.cppblog.com/ghslinux/comments/10578.html</wfw:comment><comments>http://www.cppblog.com/ghslinux/archive/2006/07/27/10578.html#Feedback</comments><slash:comments>38</slash:comments><wfw:commentRss>http://www.cppblog.com/ghslinux/comments/commentRss/10578.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ghslinux/services/trackbacks/10578.html</trackback:ping><description><![CDATA[<p><strong></strong></p><strong>
</strong><p><strong>Socket</strong>编程在大多数的编程语言中都是一件比较有趣的事情。它是比较常用的编写通过网络通信的服务器和客户端方法。在windows平台Socket通信大多是基于MS Winsock设计的。Windows支持基于TCP和UDP的socket通信。Windows APIs在socket编程中是非常有用的，但是有些人发现在用它们工作的时候有困难。<br />所以在这里我介绍一种最简单用MFC socket类进行socket编程的方法。这不仅可以使你的工作变得简单而且能减少你在网络程序上的开发时间。你可以定制一个socket类，然后你可以在你的其他的网络应用程序中重用。<br />在socket编程中，MFC提供了两个基本的类，分别是CAsyncSocket和Csocket。Csocket是从CAsyncSocket继承来的。我们可以建立定制的socket类，也是从CasyncSocket继承而来的，当然也是为了我们程序特殊的需要。<br /><strong>初始化socket<br /></strong>首先需要调用AfxSocketInit()函数来初始化我们的socket环境。<br />为了初始化sockets，我们需要调用AfxSocketInit()函数。它通常是在MFC中的InitInstance()函数中被调用的。如果我们用程序向导来创建socket程序的话，查看&#8220;use Windows Sockets&#8221;这个选项，然后选中它。它将会自动的为我们创建这个步骤了。（如果我们没有选中这个选项的话，我们也可以手动添加这些代码的。）这个函数的返回值显示这个函数的调用成功或失败。<br />BOOL CServerApp::InitInstance()<br />{....<br />if( AfxSocketInit() == FALSE)<br />&nbsp; { <br />&nbsp; AfxMessageBox("Sockets Could Not Be Initialized"); <br />&nbsp; return FALSE; <br />&nbsp; }<br />&nbsp; ...<br />}<br /><strong>创建Server Sockets<br /></strong>为了创建一个Server Socket，我们需要声明一个CAyncSocket的变量或者我们自己定制的一个从AyncSocket或是Cscket继承来的类的类型的变量。然后调用Create()函数，同时指定监听的端口。这个函数的返回值显示这个函数的调用成功或失败。<br />UpdateData(TRUE);<br />m_sListener.Create(m_port);<br />if(m_sListener.Listen()==FALSE) <br />{ <br />AfxMessageBox("Unable to Listen on that port,please try another port"); <br />m_sListener.Close(); <br />return; <br />}<br /><strong>创建Client Sockets<br /></strong>为了创建Client socket类，我们需要声明一个CAyncSocket的变量或者我们自己定制的一个从AyncSocket或是Cscket继承来的类的类型的变量。然后调用Create()函数，同时指定监听的端口。这个函数的返回值显示这个函数的调用成功或失败。<br />m_sConnected.Create();<br />m_sConnected.Connect("server ip",port);<br /><strong>监听客户端的连接<br /></strong>创建了server socket以后，我们要进行监听。调用Listen()函数。这个函数的返回值显示这个函数的调用成功或失败。<br />if( m_sListener.Listen()== FALSE) <br />{ <br />AfxMessageBox("Unable to Listen on that port,please try another port"); <br />m_sListener.Close(); <br />return;<br />}<br /><strong>接受连接<br /></strong>连接请求要被接受accept，是用另外的socket，不是正在监听的socket。请参看代码。<br />void CXXXDlg::OnAccept()<br />{<br />&nbsp;CString strIP; <br />&nbsp;UINT port; <br />&nbsp;if(m_sListener.Accept(m_sConnected)) <br />&nbsp;{<br />&nbsp; m_sConnected.GetSockName(strIP,port); //应该是GetPeerName，获取对方的IP和port<br />&nbsp; m_status="Client Connected,IP :"+ strIP; <br />&nbsp; m_sConnected.Send("Connected To Server",strlen("Connected To&nbsp; Server"));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />UpdateData(FALSE); <br />&nbsp;}<br />&nbsp;else <br />&nbsp;{ <br />&nbsp;AfxMessageBox("Cannoot Accept Connection"); <br />&nbsp;} <br />}<br /><strong>发送数据</strong><br />数据放在一个buffer中或是结构体中，调用send()函数发送。<br />m_sConnected.Send(pBuf,iLen);<br /><strong>接受数据<br /></strong>调用receive()接受数据。<br />void CXXXrDlg::OnReceive() <br />{ <br />char *pBuf =new char [1025]; <br />CString strData; <br />int iLen;<br />iLen=m_sConnected.Receive(pBuf,1024);&nbsp;&nbsp;&nbsp; <br />if(iLen == SOCKET_ERROR)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; {<br />&nbsp; AfxMessageBox("Could not Recieve");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />else&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; { <br />&nbsp; pBuf[iLen]=NULL;<br />&nbsp; strData=pBuf;<br />&nbsp; m_recieveddata.Insert(m_recieveddata.GetLength(),strData); <br />&nbsp;//display in server&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;UpdateData(FALSE); <br />&nbsp;m_sConnected.Send(pBuf,iLen);&nbsp; //send the data back to the Client&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;delete pBuf;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; } <br />}<br /><strong>关闭连接<br /></strong>m_sConnected.ShutDown(0);&nbsp;&nbsp;&nbsp; 停止发送数据<br />m_sConnected.ShutDown(1);&nbsp;&nbsp;&nbsp; 停止接受数据<br />m_sConnected.ShutDown(2);&nbsp;&nbsp;&nbsp; 停止发送接受数据<br />m_sConnected.Close();<br /><strong>编写自己的socket类<br /></strong>在class view中选择添加一个新类，设置它的基类为CAsyncSocket，在类向导的帮助下添加如下的一些函数。<br />class MySocket : public CAsyncSocket<br />{ // Attributes <br />public: <br />&nbsp;// Operations<br />public: <br />MySocket(); <br />virtual ~MySocket(); <br />// Overrides <br />public: <br />void SetParentDlg(CDialog *pDlg);// ClassWizard generated virtual function overrides <br />//{{AFX_VIRTUAL(MySocket) <br />public: <br />virtual void OnAccept(int nErrorCode);<br />virtual void OnClose(int nErrorCode);<br />virtual void OnConnect(int nErrorCode);<br />virtual void OnOutOfBandData(int nErrorCode);<br />virtual void OnReceive(int nErrorCode); <br />virtual void OnSend(int nErrorCode); <br />//}}AFX_VIRTUAL // Generated message map functions <br />//{{AFX_MSG(MySocket) <br />// NOTE - the ClassWizard will add and remove member functions here. //}}AFX_MSG <br />protected: <br />private:<br />CDialog * m_pDlg; <br />};<br /><strong>设置&#8220;Parent Dialog&#8221;<br /></strong>调用这个socket类的SetParentDlg函数，保证当socket事件发生的时候这个窗体能接收到。<br />m_sListener.SetParentDlg(this); <br />m_sConnected.SetParentDlg(this);<br /><strong>建立Socket 事件和窗体成员函数之间的联系</strong><br />在这个窗体类中添加一些函数，比如void OnReceive(); void OnClose(); void OnAccept(); void OnConnect()等，它们会在我们编写的的socket类中调用到。<br />void MySocket::OnAccept(int nErrorCode) <br />{ <br />// TODO: Add your specialized code here and/or call the base class <br />if(nErrorCode==0) <br />{ <br />((CServerDlg*)m_pDlg)-&gt;OnAccept(); <br />}<br />CAsyncSocket::OnAccept(nErrorCode); <br />} <br />这里只写了一个OnAccept（）函数，其他的几个中也有类似的调用。详细的请参考代码。<br /><br /><br />email: ghs_linux@163.com<br />欢迎交流哦 ：）</p><img src ="http://www.cppblog.com/ghslinux/aggbug/10578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ghslinux/" target="_blank">信任</a> 2006-07-27 12:05 <a href="http://www.cppblog.com/ghslinux/archive/2006/07/27/10578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>