• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            網(wǎng)絡(luò)軟件開(kāi)發(fā)

            網(wǎng)絡(luò)軟件開(kāi)發(fā),vc ++ 、linux 、asp、sql server 2000 android、iOS

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              5 隨筆 :: 1 文章 :: 45 評(píng)論 :: 0 Trackbacks

            2008年5月7日 #

                 摘要: SkinEngine控件是一組用于優(yōu)化界面設(shè)計(jì)可視化控件,它重寫了大部分可視化組件的源代碼,使其外觀更為美觀漂亮,美化了程序界面的設(shè)計(jì),使得程序員可以把更多的精力放在系統(tǒng)軟件功能的設(shè)計(jì)上.
            首先從網(wǎng)上下載SkinEngine控件的安裝包,我下載的是3.4.7版本,下載以后發(fā)現(xiàn)這個(gè)控件的安裝竟然是windows的軟件安裝方式(而不是delphi安裝第三方控件的安裝包方式),安裝后發(fā)現(xiàn)系統(tǒng)的程序菜單多了一項(xiàng)SkinEngine
              閱讀全文
            posted @ 2008-05-07 01:45 信任 閱讀(1768) | 評(píng)論 (0)編輯 收藏

            2008年5月3日 #

                 摘要: /******************************************************************************
            * Copyright (C) 2000 by Robert Hubley. *
            * All rights reserved. *
            * *
            * This software is provided ``AS IS'' and any express or implied *
            * warranties, including, but not limited to, the implied warranties of *   閱讀全文
            posted @ 2008-05-03 17:26 信任 閱讀(479) | 評(píng)論 (0)編輯 收藏

            2006年8月5日 #

            ??? ?? 一直以來(lái)都想有自己的即時(shí)通訊軟件,所以也一直致力于即時(shí)通訊軟件的開(kāi)發(fā)。今天完成的是軟件的兩個(gè)界面。拿出來(lái)給大家看看,哈哈:)
            ?? ? 歡迎交流哦。
            ???? 軟件登錄界面:

            ???? 軟件登錄成功頁(yè)面:
            posted @ 2006-08-05 14:19 信任 閱讀(935) | 評(píng)論 (5)編輯 收藏

            2006年8月4日 #

            ????? 當(dāng)我們?cè)诰W(wǎng)頁(yè)上看到關(guān)于QQ或是淘寶旺旺的在線連接的時(shí)候,點(diǎn)擊那個(gè)連接的時(shí)候,會(huì)判斷你的系統(tǒng)里是否裝了該軟件,如果裝了則彈出聊天窗口;如果沒(méi)有安裝則提示你去安裝。
            ?????? 這個(gè)效果用到了 ActiveX控件等。我是用asp和ActiveX實(shí)現(xiàn)該功能的,其中也用到了Javascript腳本語(yǔ)言。
            posted @ 2006-08-04 11:46 信任 閱讀(842) | 評(píng)論 (0)編輯 收藏

            2006年7月27日 #

            Socket編程在大多數(shù)的編程語(yǔ)言中都是一件比較有趣的事情。它是比較常用的編寫通過(guò)網(wǎng)絡(luò)通信的服務(wù)器和客戶端方法。在windows平臺(tái)Socket通信大多是基于MS Winsock設(shè)計(jì)的。Windows支持基于TCP和UDP的socket通信。Windows APIs在socket編程中是非常有用的,但是有些人發(fā)現(xiàn)在用它們工作的時(shí)候有困難。
            所以在這里我介紹一種最簡(jiǎn)單用MFC socket類進(jìn)行socket編程的方法。這不僅可以使你的工作變得簡(jiǎn)單而且能減少你在網(wǎng)絡(luò)程序上的開(kāi)發(fā)時(shí)間。你可以定制一個(gè)socket類,然后你可以在你的其他的網(wǎng)絡(luò)應(yīng)用程序中重用。
            在socket編程中,MFC提供了兩個(gè)基本的類,分別是CAsyncSocket和Csocket。Csocket是從CAsyncSocket繼承來(lái)的。我們可以建立定制的socket類,也是從CasyncSocket繼承而來(lái)的,當(dāng)然也是為了我們程序特殊的需要。
            初始化socket
            首先需要調(diào)用AfxSocketInit()函數(shù)來(lái)初始化我們的socket環(huán)境。
            為了初始化sockets,我們需要調(diào)用AfxSocketInit()函數(shù)。它通常是在MFC中的InitInstance()函數(shù)中被調(diào)用的。如果我們用程序向?qū)?lái)創(chuàng)建socket程序的話,查看“use Windows Sockets”這個(gè)選項(xiàng),然后選中它。它將會(huì)自動(dòng)的為我們創(chuàng)建這個(gè)步驟了。(如果我們沒(méi)有選中這個(gè)選項(xiàng)的話,我們也可以手動(dòng)添加這些代碼的。)這個(gè)函數(shù)的返回值顯示這個(gè)函數(shù)的調(diào)用成功或失敗。
            BOOL CServerApp::InitInstance()
            {....
            if( AfxSocketInit() == FALSE)
              {
              AfxMessageBox("Sockets Could Not Be Initialized");
              return FALSE;
              }
              ...
            }
            創(chuàng)建Server Sockets
            為了創(chuàng)建一個(gè)Server Socket,我們需要聲明一個(gè)CAyncSocket的變量或者我們自己定制的一個(gè)從AyncSocket或是Cscket繼承來(lái)的類的類型的變量。然后調(diào)用Create()函數(shù),同時(shí)指定監(jiān)聽(tīng)的端口。這個(gè)函數(shù)的返回值顯示這個(gè)函數(shù)的調(diào)用成功或失敗。
            UpdateData(TRUE);
            m_sListener.Create(m_port);
            if(m_sListener.Listen()==FALSE)
            {
            AfxMessageBox("Unable to Listen on that port,please try another port");
            m_sListener.Close();
            return;
            }
            創(chuàng)建Client Sockets
            為了創(chuàng)建Client socket類,我們需要聲明一個(gè)CAyncSocket的變量或者我們自己定制的一個(gè)從AyncSocket或是Cscket繼承來(lái)的類的類型的變量。然后調(diào)用Create()函數(shù),同時(shí)指定監(jiān)聽(tīng)的端口。這個(gè)函數(shù)的返回值顯示這個(gè)函數(shù)的調(diào)用成功或失敗。
            m_sConnected.Create();
            m_sConnected.Connect("server ip",port);
            監(jiān)聽(tīng)客戶端的連接
            創(chuàng)建了server socket以后,我們要進(jìn)行監(jiān)聽(tīng)。調(diào)用Listen()函數(shù)。這個(gè)函數(shù)的返回值顯示這個(gè)函數(shù)的調(diào)用成功或失敗。
            if( m_sListener.Listen()== FALSE)
            {
            AfxMessageBox("Unable to Listen on that port,please try another port");
            m_sListener.Close();
            return;
            }
            接受連接
            連接請(qǐng)求要被接受accept,是用另外的socket,不是正在監(jiān)聽(tīng)的socket。請(qǐng)參看代碼。
            void CXXXDlg::OnAccept()
            {
             CString strIP;
             UINT port;
             if(m_sListener.Accept(m_sConnected))
             {
              m_sConnected.GetSockName(strIP,port); //應(yīng)該是GetPeerName,獲取對(duì)方的IP和port
              m_status="Client Connected,IP :"+ strIP;
              m_sConnected.Send("Connected To Server",strlen("Connected To  Server"));     
            UpdateData(FALSE);
             }
             else
             {
             AfxMessageBox("Cannoot Accept Connection");
             }
            }
            發(fā)送數(shù)據(jù)
            數(shù)據(jù)放在一個(gè)buffer中或是結(jié)構(gòu)體中,調(diào)用send()函數(shù)發(fā)送。
            m_sConnected.Send(pBuf,iLen);
            接受數(shù)據(jù)
            調(diào)用receive()接受數(shù)據(jù)。
            void CXXXrDlg::OnReceive()
            {
            char *pBuf =new char [1025];
            CString strData;
            int iLen;
            iLen=m_sConnected.Receive(pBuf,1024);   
            if(iLen == SOCKET_ERROR)     
              {
              AfxMessageBox("Could not Recieve");     
              }     
            else    
              {
              pBuf[iLen]=NULL;
              strData=pBuf;
              m_recieveddata.Insert(m_recieveddata.GetLength(),strData);
             //display in server             
             UpdateData(FALSE);
             m_sConnected.Send(pBuf,iLen);  //send the data back to the Client    
             delete pBuf;         
              }
            }
            關(guān)閉連接
            m_sConnected.ShutDown(0);    停止發(fā)送數(shù)據(jù)
            m_sConnected.ShutDown(1);    停止接受數(shù)據(jù)
            m_sConnected.ShutDown(2);    停止發(fā)送接受數(shù)據(jù)
            m_sConnected.Close();
            編寫自己的socket類
            在class view中選擇添加一個(gè)新類,設(shè)置它的基類為CAsyncSocket,在類向?qū)У膸椭绿砑尤缦碌囊恍┖瘮?shù)。
            class MySocket : public CAsyncSocket
            { // Attributes
            public:
             // Operations
            public:
            MySocket();
            virtual ~MySocket();
            // Overrides
            public:
            void SetParentDlg(CDialog *pDlg);// ClassWizard generated virtual function overrides
            //{{AFX_VIRTUAL(MySocket)
            public:
            virtual void OnAccept(int nErrorCode);
            virtual void OnClose(int nErrorCode);
            virtual void OnConnect(int nErrorCode);
            virtual void OnOutOfBandData(int nErrorCode);
            virtual void OnReceive(int nErrorCode);
            virtual void OnSend(int nErrorCode);
            //}}AFX_VIRTUAL // Generated message map functions
            //{{AFX_MSG(MySocket)
            // NOTE - the ClassWizard will add and remove member functions here. //}}AFX_MSG
            protected:
            private:
            CDialog * m_pDlg;
            };
            設(shè)置“Parent Dialog”
            調(diào)用這個(gè)socket類的SetParentDlg函數(shù),保證當(dāng)socket事件發(fā)生的時(shí)候這個(gè)窗體能接收到。
            m_sListener.SetParentDlg(this);
            m_sConnected.SetParentDlg(this);
            建立Socket 事件和窗體成員函數(shù)之間的聯(lián)系
            在這個(gè)窗體類中添加一些函數(shù),比如void OnReceive(); void OnClose(); void OnAccept(); void OnConnect()等,它們會(huì)在我們編寫的的socket類中調(diào)用到。
            void MySocket::OnAccept(int nErrorCode)
            {
            // TODO: Add your specialized code here and/or call the base class
            if(nErrorCode==0)
            {
            ((CServerDlg*)m_pDlg)->OnAccept();
            }
            CAsyncSocket::OnAccept(nErrorCode);
            }
            這里只寫了一個(gè)OnAccept()函數(shù),其他的幾個(gè)中也有類似的調(diào)用。詳細(xì)的請(qǐng)參考代碼。


            email: ghs_linux@163.com
            歡迎交流哦 :)

            posted @ 2006-07-27 12:05 信任 閱讀(6013) | 評(píng)論 (38)編輯 收藏

            僅列出標(biāo)題  
            敏捷軟件、敏捷企業(yè)管理系統(tǒng) 18禁黄久久久AAA片| 国色天香久久久久久久小说 | 99国产精品久久久久久久成人热| 久久99精品综合国产首页| 亚洲欧美日韩精品久久亚洲区| 久久亚洲精精品中文字幕| 久久WWW免费人成—看片| 国产精品美女久久久m| 久久人人爽人人爽人人爽| 久久久久久A亚洲欧洲AV冫 | 69SEX久久精品国产麻豆| 日韩一区二区久久久久久| 国产亚洲精品美女久久久| 狠狠色伊人久久精品综合网| 亚洲日韩中文无码久久| 久久久久黑人强伦姧人妻| 国产精品99久久99久久久| 亚洲人成无码网站久久99热国产| 99久久超碰中文字幕伊人| 精品人妻伦九区久久AAA片69 | 久久精品无码专区免费东京热| 狠狠色综合网站久久久久久久高清 | 99久久无码一区人妻a黑| 久久亚洲精品无码VA大香大香| 精品无码久久久久久久久久| 国产精品美女久久久久| 伊人久久大香线蕉AV色婷婷色| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 久久婷婷五月综合国产尤物app| 久久综合日本熟妇| 狠狠综合久久综合88亚洲| 久久亚洲欧洲国产综合| 久久青青草原综合伊人| 久久Av无码精品人妻系列 | 久久久久国产精品麻豆AR影院| 国产精品久久久福利| 国产午夜久久影院| 天天久久狠狠色综合| 国产成人无码精品久久久免费| 久久影院亚洲一区| 亚洲精品乱码久久久久久蜜桃|