我有一定的C++基础,现在想学网络编程,
想问一个问题:学网络编程是不是只要用SDK,
即用Windows API编程,而不要学MFC编程?
学MFC编程能写些什么功能的程序?网络方面
要用的它吗?

解决方案 »

  1.   

    告诉你,mfc在网络方面基本用不上。
    但你编一个程序,不可能只有网络连接,没其他东西吧。
      

  2.   

    学纯网络的东西可以和MFC无关,要一个命令行界面足够了。
      

  3.   

    TO feeboby(诺曼之路):我是楼主,
    那你的意思是MFC用来做界面,
    然后用API写网络方面的东西是吗?
    是不是桌面应用程序大部分是用MFC写?
      

  4.   

    ekun888,我不同意你的看法,MFC编程和网络编程是两码事!
    建议你,把机械工业出版社出的《Windows网络编程技术》看N遍后,再利用MFC或者SDK编写一些小的通信例程,然后编写较大规模的网络程序,最后你就明白了网络编程了!!!
      

  5.   

    不关MFC太多事情。API和底层的
    多学点驱动程序编程吧。
      

  6.   

    TO  studyingpersons(深入学习) :
    机械工业出版社出的《Windows网络编程技术》里面的代码怎么都是C语言写的?
    是不是Windows网络编程就是用C语言写?
    还有,现在我在学Windows API编程,发现代码也全是C,只不过一些数据类型
    换了一下而矣。有人说MFC只是对API进行了封装而矣,是不是MFC用C++对API
    进行了封装?MFC编程是用C++写代码。
      

  7.   

    网络编程基本上是c语言,你用c++也可以。
    我说学mfc的目的是给别人一个可操作的界面。
      

  8.   

    何止跟网络相关的API,Windows系统的所有的API都是C语言格式的。
    你见过那个API使用CString对象做参数吗?(:
      

  9.   

    再说,C++几乎完全兼容了C,还分那么清楚干吗?
    在VC中,调用Windows的任何API都是再正常不过的事情。
      

  10.   

    TO ekun888() :
    1.机械工业出版社出的《Windows网络编程技术》里面的代码怎么都是C语言写的?
    因为若想对Windows进行网络编程,则必须有网络编程接口函数(即网络API),这些接口函数是供程序员使用的。Windows操作系统据说就是用C语言写的,所以那些接口函数也是用C语言写的。机械工业出版社出的《Windows网络编程技术》里面的代码要使用这些接口函数,所以使用了最让人接收的方式(即使用C语言)编写代码?2.是不是Windows网络编程就是用C语言写?
    也不一定,因为MFC对一些网络编程接口进行了封装,所以你也可以使用面向对象的方法编写程序。3.有人说MFC只是对API进行了封装而矣,是不是MFC用C++对API进行了封装?
    是的,MFC用面向对象的方法把大部分的API函数封装到类中。我可以给你举一个套接字类CAsyncSocket的例子。
    该类有一个成员函数是Create,如下所示:
    BOOL CAsyncSocket::Create(UINT nSocketPort,int nSocketType,long lEvent,LPCTSTR lpszSocketAddress)
    {
       if (Socket(nSocketType,lEvent))
       {
            if (Bind(nSocketPort,lpszSocketAddress))
                return TRUE;
            int nResult = GetLastError();
            Close();
            WSASetLastError(nResult); //对WSAGetLastError()封装
       }
       return FALSE;
    }BOOL CAsyncSocket::Socket(int nSocketType,long lEvent,int nProtocolType,int nAddressFormat)
    {
        ASSERT(m_hSocket == INVALID_SOCKET);
        m_hSocket = socket(nAddressFormat,nSocketType,nProtocolType);//对socket()封装
        ......
    }BOOL CAsyncSocket::Bind(UINT nSocketPort,LPCTSTR lpszSocketAddress)
    {
        USES_CONVERSION;
        
        //构造地址信息
        SOCKADDR_IN sockAddr;
        memset(&sockAddr,0,sizeof(sockAddr));
        
        //得到地址参数的值
        LPSTR lpszAscii = T2A((LPTSTR)lpszSocketAddress);
        //指定是Internet类型的地址
        socketAddr.sin_family = AF_INET;
        
        //如果没有指定地址,则自动的得到一个本地IP地址
        //同时进行字节顺序的转换:从本地字节顺序到网络字节顺序。
        if (lpszAscii == NULL)
        {
            socketAddr.sin_addr.s_addr = htonl(INADDR_ANY);
        }
        else
        {
            DWORD lResult = inet_addr(lpszAscii);
            if (lResult == INADDR_NONE)
            {
                WSASetLastError(WSAEINVAL);
                return FALSE;
            }
            sockAddr.sin_addr.s_addr = lResult;
            
            //如果指定的端口号是0,则分配一个端口号(1024到5000)
            //同时进行字节顺序的转换:从本地字节顺序到网络字节顺序。
            sockAddr.sin_port = htons((u_short)nSocketPort);
            //调用Window Sockets API函数bind()
            return bind((SOCKADDR*)&sockAddr,sizeof(sockAddr));
        }
    }
      

  11.   

    为什么有这么多人贬低mfc,合理的利用mfc,利用ms封装好的东西,效率不会比你自己写的查啊。再说现在有多少程序这么在意一点点的效率差异呢?系统的稳健可靠许多时候更重要
      

  12.   

    TO oldfoxXP(oldfox):
    我同意你的看法!!!
    对于高速CPU、大容量内存和硬盘来说效率问题应该放到次席,系统的稳定性是应该首先考虑的!!!
    我有一个搞数据库开发的同学,他说自己创建表的时候基本上只符合第二范式,原因就是对于高性能的服务器来说可以忽略效率问题,而且很多公司也都认同了这种想法!!!
      

  13.   

    http://www.vodhere.com/auto.asp?id=1987770
      

  14.   

    我和你的想法一样
    不过我觉得,mfc和API结合会有更好的效果,可以相互弥补彼此的不足
      

  15.   

    为什么有这么多人贬低mfc,合理的利用mfc,利用ms封装好的东西,效率不会比你自己写的查啊。再说现在有多少程序这么在意一点点的效率差异呢?系统的稳健可靠许多时候更重要
    //===================================================
    CSocket是为了窗口编程用的,用在其他方面是不太好。确实大部分的网络程序可能都不是用的CSocket.
    假如写窗口类,当然是用MFC了。其他的就不用了吧。
      

  16.   

    同意sevencat(七猫)的看法!!!!
    我补充一点,虽然CAsyncSocket类和CSocket的类都是针对窗口编程的,但是它们不能充分利用五种套接字I/O模型,尤其是WSAEventSelect模型、重叠模型和完全端口模型,对于套接字什么时候该读、什么时候该写是不能完全依靠窗口响应消息函数的!!!
    有时候要在多现程中编写网络程序,为了线程之间的同步操作,那么我们最好使用WSAEventSelect模型!!!
    如果想以较高的效率管理较多(100以内)的套接字,那么最好使用重叠模型。
    如果想管理大量(成百上千)的套接字,那么最好使用完全端口模型。
    当然,这只是一个普遍性原则。
      

  17.   

    http://expert.csdn.net/Expert/topic/2353/2353753.xml?temp=.9336359
    完成端口FRAMEWORK,有兴趣的话帮我测试一下,这是初稿(实现了线程池调度)。
    有BUG或者建议发EMAIL我或者发短信给我。
      

  18.   

    异步读写吧我想就是这样。
    这本书有原理
    Programming Server-Side Applications for Microsoft Windows 2000
    在这个地方有得下:
    http://www.bjdt2.com/bbs/book/e5/other/microsoft/programming.htm
      

  19.   

    谢谢sevencat(七猫)!!!!!!!!!!!!!!
      

  20.   

    1:基本上是,但也可以用C++
    2:MFC通过C++把用C写的API封装了一遍
    3:是api,但是你可以自己用c++来封装
    4:底层如网络部分多用api,快速开发就可以用MFC