• <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)絡軟件開發(fā)

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

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

            Socket編程在大多數(shù)的編程語言中都是一件比較有趣的事情。它是比較常用的編寫通過網(wǎng)絡通信的服務器和客戶端方法。在windows平臺Socket通信大多是基于MS Winsock設計的。Windows支持基于TCP和UDP的socket通信。Windows APIs在socket編程中是非常有用的,但是有些人發(fā)現(xiàn)在用它們工作的時候有困難。
            所以在這里我介紹一種最簡單用MFC socket類進行socket編程的方法。這不僅可以使你的工作變得簡單而且能減少你在網(wǎng)絡程序上的開發(fā)時間。你可以定制一個socket類,然后你可以在你的其他的網(wǎng)絡應用程序中重用。
            在socket編程中,MFC提供了兩個基本的類,分別是CAsyncSocket和Csocket。Csocket是從CAsyncSocket繼承來的。我們可以建立定制的socket類,也是從CasyncSocket繼承而來的,當然也是為了我們程序特殊的需要。
            初始化socket
            首先需要調(diào)用AfxSocketInit()函數(shù)來初始化我們的socket環(huán)境。
            為了初始化sockets,我們需要調(diào)用AfxSocketInit()函數(shù)。它通常是在MFC中的InitInstance()函數(shù)中被調(diào)用的。如果我們用程序向?qū)韯?chuàng)建socket程序的話,查看“use Windows Sockets”這個選項,然后選中它。它將會自動的為我們創(chuàng)建這個步驟了。(如果我們沒有選中這個選項的話,我們也可以手動添加這些代碼的。)這個函數(shù)的返回值顯示這個函數(shù)的調(diào)用成功或失敗。
            BOOL CServerApp::InitInstance()
            {....
            if( AfxSocketInit() == FALSE)
              {
              AfxMessageBox("Sockets Could Not Be Initialized");
              return FALSE;
              }
              ...
            }
            創(chuàng)建Server Sockets
            為了創(chuàng)建一個Server Socket,我們需要聲明一個CAyncSocket的變量或者我們自己定制的一個從AyncSocket或是Cscket繼承來的類的類型的變量。然后調(diào)用Create()函數(shù),同時指定監(jiān)聽的端口。這個函數(shù)的返回值顯示這個函數(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類,我們需要聲明一個CAyncSocket的變量或者我們自己定制的一個從AyncSocket或是Cscket繼承來的類的類型的變量。然后調(diào)用Create()函數(shù),同時指定監(jiān)聽的端口。這個函數(shù)的返回值顯示這個函數(shù)的調(diào)用成功或失敗。
            m_sConnected.Create();
            m_sConnected.Connect("server ip",port);
            監(jiān)聽客戶端的連接
            創(chuàng)建了server socket以后,我們要進行監(jiān)聽。調(diào)用Listen()函數(shù)。這個函數(shù)的返回值顯示這個函數(shù)的調(diào)用成功或失敗。
            if( m_sListener.Listen()== FALSE)
            {
            AfxMessageBox("Unable to Listen on that port,please try another port");
            m_sListener.Close();
            return;
            }
            接受連接
            連接請求要被接受accept,是用另外的socket,不是正在監(jiān)聽的socket。請參看代碼。
            void CXXXDlg::OnAccept()
            {
             CString strIP;
             UINT port;
             if(m_sListener.Accept(m_sConnected))
             {
              m_sConnected.GetSockName(strIP,port); //應該是GetPeerName,獲取對方的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ù)放在一個buffer中或是結構體中,調(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;         
              }
            }
            關閉連接
            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中選擇添加一個新類,設置它的基類為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;
            };
            設置“Parent Dialog”
            調(diào)用這個socket類的SetParentDlg函數(shù),保證當socket事件發(fā)生的時候這個窗體能接收到。
            m_sListener.SetParentDlg(this);
            m_sConnected.SetParentDlg(this);
            建立Socket 事件和窗體成員函數(shù)之間的聯(lián)系
            在這個窗體類中添加一些函數(shù),比如void OnReceive(); void OnClose(); void OnAccept(); void OnConnect()等,它們會在我們編寫的的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);
            }
            這里只寫了一個OnAccept()函數(shù),其他的幾個中也有類似的調(diào)用。詳細的請參考代碼。


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

            posted on 2006-07-27 12:05 信任 閱讀(6012) 評論(38)  編輯 收藏 引用

            評論

            # re: MFC socket程序開發(fā) 2006-08-08 14:14 ankh
            hi~能否把完整的代碼貼出來?
            或email到ankh2008@hotmail.com?  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2006-08-08 14:14 ankh
            hi~能否把完整的代碼貼出來?
            或email到ankh2008@hotmail.com?  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2006-08-09 08:33 ghslinux
            可以的。  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2006-08-11 12:18 ghslinux
            已經(jīng)發(fā)送,請查收。  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2006-08-18 09:22 marco
            能否把完整的代碼email到marcovanshine@hotmail.com? 謝謝  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2006-09-14 15:28 Mac
            好東西,學習...  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2006-10-09 23:33 清風
            樓主能否把完整代碼發(fā)送到chenweizi@sina.com
            多謝  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2007-01-23 11:36 cherry
            謝謝,小妹可否求一份完整的代碼,發(fā)送到lyl83213@hotmail.com  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2008-04-07 15:36 majia
            請把這段程序的代碼發(fā)給我一份!謝謝!majia1984@126.com  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2008-04-10 11:52 小路
            你好 我也要一份 謝謝你!!!
            blueshiang@hotmail.com  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2008-04-23 10:25 清涼
            您好,能否也給我發(fā)一份,學習,呵呵,謝謝
            huangsup110@hotmail.com  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2008-04-23 14:06 信任
            已經(jīng)發(fā)送  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2008-05-07 00:33 xiaoye
            能否給我發(fā)一分,yesj-2008@163.com,謝謝  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2008-05-09 15:16 信任
            已發(fā)送。  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2008-05-09 15:17 信任
            @清涼
            已發(fā)送  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2008-05-20 19:47 piccolo
            您好,能給我也發(fā)一份么,我在做畢業(yè)設計,有網(wǎng)絡編程方面的內(nèi)容
            謝謝 郵箱是
            lgpiccolo@163.com  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2008-05-23 11:03 ly
            你好,能給我發(fā)一份么》?我正在學習這方面,謝謝
            ly24381@163.com  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2008-06-03 20:21 goldfisher
            能否給我發(fā)一個完整的代碼?非常感謝  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2008-06-03 20:22 goldfisher
            剛忘了帖EMAIL,呵呵,goldfisher.jin@gmail.com  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2008-06-06 11:14 hwan
            能給我也發(fā)一個完整的代碼嗎? hwan_hh@126.com,謝謝  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2008-06-10 14:23 hby0501
            LZ 我也想要一份,可以么? 謝謝!!!  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2008-06-10 14:24 hby0501
            hby0501@163.com  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2008-06-13 23:09 hiyawu
            小弟需要完整代碼
            郵箱 123514228@qq.com
            ???thanks  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2008-07-09 20:50 好人
            你好,我很需要這方面的代碼。能否給我發(fā)一份
            謝謝
            zs060226@163.com  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2009-04-18 16:35 caogenxia
            可以給一份代碼我看看嗎,caogenxia@qq.com
              回復  更多評論
              

            # re: MFC socket程序開發(fā)[未登錄] 2009-06-13 21:30 天行
            能不能將完整代碼發(fā)到meibao_2000@163.com。

            先謝了。  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2009-06-25 00:44 hannah
            可以給我一分完整代碼嗎?yuhannah@hotmail.com  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2011-05-17 11:17 閉環(huán)
            樓主您好 能不能把完整的代碼發(fā)到279676738@qq.com
            不勝感激 正在學習中  回復  更多評論
              

            # re: MFC socket程序開發(fā)[未登錄] 2011-05-19 09:20 小王
            你好,能否給我一份,謝謝了,505115063@qq.com  回復  更多評論
              

            # re: MFC socket程序開發(fā)[未登錄] 2011-05-29 15:25 star
            謝謝。。能夠給我發(fā)一份啊。。正在系統(tǒng)編程中,找了好久啊。。
            623383843@qq.com
              回復  更多評論
              

            # re: MFC socket程序開發(fā) 2011-11-23 21:50 陳秋明
            您好,看了后,感覺寫的很好,但是有些細節(jié)有點疑惑,可否也發(fā)一份給我,我正在學習網(wǎng)絡編程中!謝謝
            郵箱:540284410@qq.com  回復  更多評論
              

            # re: MFC socket程序開發(fā)[未登錄] 2013-04-10 10:50 lei
            您好,這篇文章的完整代碼還有嗎,可否發(fā)我有一份,謝謝!416296223@qq.com  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2013-05-28 10:44 jeansnorth
            您好 請問能否給我發(fā)一份完整的TCP通信程序呢 我的郵箱是jeansnorth@163.com 不勝感激 本人是新手 看一部分代碼還是不太懂  回復  更多評論
              

            # re: MFC socket程序開發(fā)[未登錄] 2013-06-10 10:01 Ben
            您好,麻煩您也給我發(fā)一份好嗎?我的郵箱1324468038@qq.com 謝謝  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2013-11-18 11:23 Guilty
            你好 能給我發(fā)一份源代碼嗎 270503325@qq.com 謝謝  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2015-02-20 16:10 陳晶
            @信任
            能發(fā)一份給我嗎?非常需要,謝謝啦  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2015-04-03 13:30 linuxsocket
            以上代碼都全部發(fā)送  回復  更多評論
              

            # re: MFC socket程序開發(fā) 2015-08-31 16:21 劉培坤
            能否發(fā)送一份給我,謝謝 郵箱lpkhappy@yeah.net@linuxsocket
              回復  更多評論
              

            敏捷軟件、敏捷企業(yè)管理系統(tǒng) 久久无码一区二区三区少妇| 日本三级久久网| 一本色综合久久| 亚洲色婷婷综合久久| 久久精品国产影库免费看| 久久影院午夜理论片无码| 午夜欧美精品久久久久久久| 亚洲国产精品热久久| 囯产精品久久久久久久久蜜桃 | 精品久久久噜噜噜久久久| 97久久超碰国产精品旧版| 久久精品无码一区二区三区日韩| 久久精品国产精品青草app| 国产精品99久久久久久董美香| 国产成人久久777777| 欧美日韩精品久久久免费观看| 久久精品国产秦先生| 久久久亚洲AV波多野结衣| 国产福利电影一区二区三区久久久久成人精品综合 | 婷婷综合久久中文字幕蜜桃三电影 | 久久久久亚洲av无码专区| 久久久精品视频免费观看| 久久99精品国产自在现线小黄鸭| 久久中文精品无码中文字幕 | 午夜福利91久久福利| 性做久久久久久久| 女同久久| 国产精品一区二区久久精品无码| 国产国产成人精品久久| 国产精品久久久久久久人人看| 免费精品久久久久久中文字幕| A级毛片无码久久精品免费| 日韩人妻无码精品久久久不卡| 国产精品久久久香蕉| 国产精品无码久久四虎| 久久久久久免费一区二区三区| 国内精品久久久久影院免费| 无码国内精品久久人妻| 无码AV中文字幕久久专区| 无码精品久久久久久人妻中字| 久久人与动人物a级毛片|