關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > Windows平臺下的網絡異步通訊編程技術

        Windows平臺下的網絡異步通訊編程技術

        作者: 時間:2012-04-28 來源:網絡 收藏

        3 使用CAsyncSocket類的通訊流程
        在理解了上述的機制后,CAsyncSocket的通信流程:客戶方在使用CAsyncSocket::Connect()時,往往返回一個WSAEWOULDBLOCK的錯誤,實際上這不應該算作一個錯誤,它是Socket的提醒,由于使用了非阻塞Socket方式,所以操作需要時間,不能瞬間建立。那么可以等待,等待連接成功,于是許多程序員就在調用Connect()之后,Sleep(0),然后不停地用WSAGetLastError()或者CAsyncSocket::GetLast Error()查看Socket返回的錯誤,直到返回成功為止。這是一種錯誤的做法,斷言不能達到預期目的。事實上,可以在Connect()調用之后等待CAsyncSocket::OnConnect()事件被觸發。類似地,Send()如果返回WSAEWOULDBLOCK錯誤,在OnSend()處等待,Receive()如果返回WSAE WOULDBLOCK錯誤,則在OnReceive()處等待,具體的內部通信流程如圖2所示。

        本文引用地址:http://www.104case.com/article/202341.htm

        c.JPG



        4 使用CAsyncSocket編程的程序框架
        在進行C/S編程之前,需在定義應用程序行為的文件030 303.cpp中的Initlnstance()函數里調用AfxSocketInit()函數來初始化Wind ows Sockets。
        (1)服務器端
        以public的方式從CAsyncSocket類派生新類CServerSock,并重載OnAccept、OnReceive、OnSend函數。
        函數重載完成后,在主窗口構造新的CServeSock對象,用來監聽來自客戶機的連接,添加代碼如下:
        CServeSock m_ListenSock;//m_ListenSock為監聽套接字
        m_ListenSock.Create(m_Port,SOCK_STREAM,FD ACCEPT|FD_READ|FD_WRITE|FD_CLOSE)
        m_ListenSock→Listen(int nConnectionBacklog=5);
        函數Send()的參數說明:
        nconnectionBacklog:等待連接的最大隊列長度。
        此時服務器開始監聽來自客戶機的連接請求。
        (2)客戶機端
        以public的方式從CAsyncSocket類派生新類CClientSock,與服務器端類似,重載OnReceive()、OnSend()函數。
        已經搭建好使用CAsyncSocket類實現基于TCP協議的異步通訊的框架,具體的應用程序可以在此基礎上進行豐富與修改。

        5 結束語
        CAsyncSocket類為使用Socket提供了方便。建立Socket的WSAStartup過程和bind過程被簡化成為Create過程,IP地址類型轉換、主機名和IP地址轉換的過程中許多復雜的變量類型都被簡化成字符串和整數操作,特別是CAsyncSocket類的異步特點,完全可以替代繁瑣的線程操作。MFC提供了大量的類庫,若能靈活地使用,可大大提高編程效率。

        tcp/ip相關文章:tcp/ip是什么



        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 星座| 依兰县| 武川县| 靖边县| 雅江县| 巴里| 古丈县| 门头沟区| 内乡县| 册亨县| 博罗县| 北海市| 桂东县| 荔波县| 綦江县| 乌什县| 星座| 梁平县| 疏勒县| 织金县| 灵宝市| 平舆县| 满洲里市| 磴口县| 石河子市| 东方市| 章丘市| 竹北市| 莱西市| 黔南| 奉新县| 民勤县| 武乡县| 南乐县| 武山县| 衡水市| 胶南市| 泰和县| 莱芜市| 兴国县| 长宁区|