美文网首页
Windows网络编程中遇到的一些问题和注意事项

Windows网络编程中遇到的一些问题和注意事项

作者: Ycres | 来源:发表于2017-05-28 01:06 被阅读0次

    Preparations :VS2015安装问题

    • 安装时如果选择默认选项安装,则不会包含创建C++工程模板,需要下载,但不需要重新安装。

    选择打开devenv.exe,则可以点击相应模板进行下载。注意,打开Blend.exe下则不会出现未下载模板对应点击安装项。

    1.MFC工程创建

    MFC ActiveX 是创建一个ActiveX工程的意思,就是说你创建的工程最后生成的是一个ActiveX文件
    MFC Application 是创建一个MFC应用程序的意思,你最后生成的文件应该是以exe类型的
    MFC Dll 是创建一个支持MFC的Dll的意思,就是你最后生成的就是一个动态连接库,Dll文件

    2. MFC使用Addstring()函数乱码

    LPCTSTR用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。
    强制类型转换会出现乱码

    解决办法:

    VS属性->配置属性->常规->字符集
    改为使用多字节字符集


    多字符集1
    多字符集2
    多字符集3

    3. fscanf()和fscanf_s()用法的比较

    1. fscanf():fscanf(fp,"%d",&var);
    1. fscanf_s():fscanf(fp,"%d",&var,sizeof(int));
      区别:fscanf_s需要指定长度

    4.添加动态库

    VSVS属性->配置属性->输入->附加依赖项
    输入ws2_32.lib


    链接动态库

    5.PF_NET和AF_NET区别

    在windows中的Winsock2.h中

    #define AF_INET 0
    #define PF_INET AF_INET
    

    所以在windows中AF_INET与PF_INET完全一样

    6.向线程函数传递多个参数

    解决办法:把要传递的参数放到一个结构体中,然后把结构体变量当成参数传进去
    例:

    #include <stdio.h>  
    #include <windows.h>  
      
    typedef struct test  
    {  
        int n;  
        char c;  
        char a[100];  
    }Test;  
      
    DWORD WINAPI ThreadFun(LPVOID pM)  
    {  
        Test *pt = (Test *)pM;  
        printf("%d, %c, %s\n", pt->n, pt->c, pt->a);  
        return 0;  
    }  
      
    int main()  
    {  
        printf("main thread\n");  
      
        Test t;  
        t.n = 1;  
        t.c = 'x';  
        memset(t.a, 0, sizeof(t.a));  
        strncpy(t.a, "so great", sizeof(t.a) - 1);  
        HANDLE handle = CreateThread(NULL, 0, ThreadFun, (LPVOID)&t, 0, NULL);  
        CloseHandle(handle);  
      
        Sleep(2000);  
      
        return 0;  
    }  
    

    7.关于VS2015不能使用inet_addr()函数的问题

    解决办法:

    解决方法:项目->项目属性->c/c++->常规->SDL检查改为“否”


    inet_addr 1
    inet_addr 2
    inet_addr 3

    8.关于粘包、分包、解包问题

    解决办法:
    创建RingBuf(环形缓冲),修改通信协议(添加len长度字段)。由于数据包可能被分为两个,导致添加的标识数据包长度len字段读取发生错误,故采用环形缓冲,使得前后两个被分开的数据包合成一个。
    通信协议序列化:
    参考链接:http://mp.weixin.qq.com/s?__biz=MzAxNDI5NzEzNg==&mid=2651157407&idx=1&sn=16ea3f89f9ccbeede7b223597cfc7de0&chksm=8064a2c0b7132bd64b549adcee3d4147d0d4ab1da8682c1ff93ea51eadc0eba6526a5dc88a06&mpshare=1&scene=23&srcid=0328r5thXiK5SSGlJZr7huGT#rd

    相关文章

      网友评论

          本文标题:Windows网络编程中遇到的一些问题和注意事项

          本文链接:https://www.haomeiwen.com/subject/zxlaxxtx.html