欢迎来到皮皮网网首页

【libzen源码】【ios签名源码免费】【提供源码独立部署】c socket 源码

来源:java can通讯源码 时间:2024-11-23 15:47:54

1.CSocket之UDP编程
2.如何理解MFC程序和WIN32程序的区别?
3.为何要学习MFC?

c socket  源码

CSocket之UDP编程

       #include <stdio.h>

       #include <Winsock2.h>

       #pragma comment(lib,libzen源码"ws2_.lib")

       void main()

       {

        WORD wVersionRequested;

        WSADATA wsaData;

        int err;

        wVersionRequested = MAKEWORD( 1, 1);

        err = WSAStartup( wVersionRequested, &wsaData );

        if ( err != 0 )

        {

        return;

        }

        if ( LOBYTE( wsaData.wVersion ) != 1 ||

        HIBYTE( wsaData.wVersion ) != 1 )

        {

        WSACleanup( );

        return;

        }

        SOCKET sersocket=socket(AF_INET,SOCK_DGRAM,0);

        SOCKADDR_IN seraddr;

        seraddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

        seraddr.sin_family=AF_INET;

        seraddr.sin_port=htons();

        bind(sersocket,(SOCKADDR*)&seraddr,sizeof(SOCKADDR));

        SOCKADDR clientaddr;

        int len=sizeof(SOCKADDR);

        char revbuf[];

        char sendbuf[];

        recvfrom(sersocket,revbuf,,0,(SOCKADDR*)&clientaddr,&len);

        printf("%s\n",revbuf);

        scanf("%s",&sendbuf);

        sendto(sersocket,sendbuf,strlen(sendbuf)+1,0,(SOCKADDR*)&clientaddr,len);

        closesocket(sersocket);

        WSACleanup();

       }

       #include <stdio.h>

       #include <Winsock2.h>

       #pragma comment(lib,"ws2_.lib")

       void main()

       {

        WORD wVersionRequested;

        WSADATA wsaData;

        int err;

        wVersionRequested = MAKEWORD( 1, 1);

        err = WSAStartup( wVersionRequested, &wsaData );

        if ( err != 0 )

        {

        return;

        }

        if ( LOBYTE( wsaData.wVersion ) != 1 ||

        HIBYTE( wsaData.wVersion ) != 1 )

        {

        WSACleanup( );

        return;

        }

        SOCKET sockclient=socket(AF_INET,SOCK_DGRAM,0);

        SOCKADDR_IN clientaddr;

        clientaddr.sin_addr.S_un.S_addr=inet_addr(".0.0.1");

        clientaddr.sin_family=AF_INET;

        clientaddr.sin_port=htons();

        int len=sizeof(SOCKADDR);

        char revbuf[];

        char sendbuf[];

        printf("请输入内容:\n");

        while(1)

        {

        scanf("%s",&sendbuf);

        sendto(sockclient,sendbuf,strlen(sendbuf)+1,0,(SOCKADDR*)&clientaddr,len);

        recvfrom(sockclient,revbuf,,0,(SOCKADDR*)&clientaddr,&len);

        printf("%s\n",revbuf);

        }

        closesocket(sockclient);

        WSACleanup();

       }

       å¤§åŒå°å¼‚,CSocket只是进行了封装而已,原理是一样的,编程要思路灵活才行。

如何理解MFC程序和WIN程序的区别?

       ä½ çš„理解不对

       Win api只是接口,只能被用到别的东西里才显的出价值,比如用在了MFC、DLL、串口、SOCKET,COM+。

       è€ŒMFC是基本类库,是属于C++的范畴,WIN API基本上都是结构类型的应用,里面没有类,所以MFC可以调用API,API不能调用MFC!

       é€šè¿‡ä¼ å£ï¼Œåˆ©ç”¨MFC可以将C++程序各种的WIN的环境,MFC只能在WIN环境下使用,API也是

       Win API是 Windows系统下位 Application Program Interface 应用程序接口,MFC是Microsoft Function Class 微软函数类库, 前者更加底层,在MFC程序里,可以调用WIN API的,MFC本来就用了很多WIN API,MFC编写的程序可以用在各种Windows环境下的

为何要学习MFC?

       è¿˜æœ‰ä¸€ä¸ªé¢†åŸŸæˆ‘们不能忽略,那就是个人软件、小型软件。在猪八戒之类的威客网上软件开发的栏目搜一搜,可以发现大部分的windows程序开发的需求,威客们都是用MFC或Dephi来开发,当然,还有一些易语言。如果你要开发一款个人用的小软件,MFC是很好的选择。

       å¯¹äºŽè¿™ç§ä¸ªäººè½¯ä»¶ã€å°åž‹è½¯ä»¶ï¼ŒMFC还是有着很多优势的:

       1.体积小,静态编译后体积也不大。

       2.在各版本的windows上兼容性较好。

       3.对windowsAPI的调用较方便。

       å­¦ä¹ MFC不仅仅要学习用MFC,还要学习MFC的框架设计思想。

       å¦‚果仅仅会用MFC的话,可能在找工作的时候,一旦工作内容离开了MFC,就什么也不会了。MFC作为一个诞生了年的成熟的框架,其设计思想是很值得我们学习的。粗略读一读MFC源代码就会发现MFC的厉害之处,很多思想都让人很佩服,有时候看完一段源代码后,心里暗自感叹。无法想象MFC在那个连C++的STL都还没出现的年代,就用泛型编程技术写出了CList、CArray、CMap等容器。MFC不仅仅是将面向过程的API封装为面向对象的形式,他还在背后做了很多事情,包括简化一些过程,提高一些稳定性。如果让我把面向过程的windows

       socket API封装成面向对象的类,我肯定会这样想,嗯,socketAPI几乎每个函数的第一个参数都是SOCKET结构体,这是面向过程的特点,如果要封装为面向对象的类,自然是把这个结构体作为类的成员变量,然后封装socketAPI函数为类的方法,提供大量的默认参数,就OK。实际上并非这样,读一读MFC中CSocket的的源代码,就会发现实际上并非如此简单。MFC的CSocket类里,做了大量的工作,使我们用起来大大的方便了。如果你之前一直用socketAPI来开发网络程序,再来用MFC的CAsyncSocket和CSocket的话,会觉得,太方便了!仔细读一读MFC源码,真的对我们将来编写自己的类、设计自己的框架,有很大帮助!

       ä¸€ä¸ªå¥½çš„程序员,不能只是会用现成类库的方法。

       ä¸€ä¸ªå¥½çš„程序员,应该会封装、会设计类库、会设计框架。

       åœ¨ä¸€ä¸ªå®žé™…的项目中往往是这样的:我们需要开发一个windows平台上的软件,直接用windowsAPI吧,1.太麻烦2.面向过程的代码写的越多越头疼3.可重用性不强。使用现成类库吧,有时候无法满足我们特定的需求。这时候,我们就需要自己动手封装API,自己动手派生现成类库中的类,来添加方法。如果你不了解类库,派生下来后就会发现根本无从下手。很多公司在一些做了很久的项目上,往往都是有自己的类库、自己的框架,并不断的完善和扩展。这也是我们要学习类库、框架设计的原因。