當前位置:編程學習大全網 - 編程語言 - 高分.如何利用Csocket類創建壹個網絡連接程序

高分.如何利用Csocket類創建壹個網絡連接程序

實現方法

微軟的MFC把復雜的WinSock API函數封裝到類裏,這使得編寫網絡應用程序更容易。CAsyncSocket類逐個封裝了WinSock API,為高級網絡程序員 提供了更加有力而靈活的方法。這個類基於程序員了解網絡通訊的假設,目的是為了在MFC中使用WinSock,程序員有責任處理諸如阻塞、字節順序和在Unicode與MBCS 間轉換字符的任務。為了給程序員提供更方便的接口以自動處理這些任務,MFC給出 了CSocket類,這個類是由CAsyncSocket類繼承下來的,它提供了比CAsyncSocket更高層的WinSock API接口。Csocket類和CsocketFile類可以與Carchive類壹起合作來管理發送和接收的數據,這使管理數據收發更加便利。CSocket對象提供阻塞模式,這對於Carchive的同步操作是至關重要的。阻塞函數(如Receive()、Send()、ReceiveFrom()、SendTo() 和Accept())直到操作完成後才返回控制權,因此如果需要低層控制和高效率,就使用CasyncSock類;如果需要方便,則可使用Csocket類。

壹些網絡應用程序(如網絡電話、多媒體會議工具)對實時性要求非常強,要求能夠直接應用WinSock發送和接收數據。為了充分利用MFC 的優勢,首選方案應當是MFC中的CAsyncSocket類或CSocket類,這兩個類完全封裝了WinSock API,並提供更多的便利。本實例介紹應用這兩個類的編程模型,並引出相關的成員函數與壹些概念的解釋。

CSocket類是由CAsyncSocket繼承而來的,事實上,在MFC中CAsyncSocket 逐個封裝了WinSock API,每個CAsyncSocket對象代表壹個Windows Socket對象,使用CAsyncSocket 類要求程序員對網絡編程較為熟悉。相比起來,CSocket類是CAsyncSocket的派生類, 繼承了它封裝的WinSock API。

壹個CSocket對象代表了壹個比CAsyncSocket對象更高層次的Windows Socket的抽象,CSocket類與CSocketFile類和CArchive類壹起工作來發送和接收數據,因此使用它更加容易使用。CSocket對象提供阻塞模式,因為阻塞功 能對於CArchive的同步操作是至關重要的。在這裏有必要對阻塞的概念作壹解釋: 壹個socket可以處於"阻塞模式"或"非阻塞模式",當壹個套接字處於阻塞模式(即同步操作)時,它的阻塞函數直到操作完成才會返回控制權,之所以稱為阻塞是因為此套接字的阻塞函數在完成操作返回之前什麽也不能做。如果壹個socket處於非阻塞模式(即異步操作),則會被調用函數立即返回。在CAsyncSocket類中可以用GetLastError 成員函數查詢最後的錯誤,如果錯誤是WSAEWOULDBLOCK則說明有阻塞,而CSocket絕不會返回WSAEWOULDBLOCK,因為它自己管理阻塞。微軟建議盡量使用非阻塞模式,通過網絡事件的發生而通知應用程序進行相應的處理。但在CSocket類中,為了利用CArchive 處理通訊中的許多問題和簡化編程,它的壹些成員函數總是具有阻塞性質的,這是因為CArchive類需要同步的操作。

  • 上一篇:為什麽cpu使用率總是100
  • 下一篇:微機原理及應用,什麽是接口,接口具有哪些功能?
  • copyright 2024編程學習大全網