小编kar*_*kar的帖子

winsock弃用了没有警告

我正在尝试使用VS2015(C++控制台应用程序)创建UDP多播套接字程序.

我收到以下错误,

Error   C4996   'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings mulitcast_listener
Run Code Online (Sandbox Code Playgroud)

我尝试通过"Project" - >"Properties" - >"Configuration properties" - >"C/C++" - >"Preprocessor" - >"Preprocessor definitions"将_WINSOCK_DEPRECATED_NO_WARNINGS符号添加到我的项目设置中.但它仍然说相同.

然后我试图添加符号上方的#include"stdafx.h中"

#define _WINSOCK_DEPRECATED_NO_WARNINGS 1

然后在"项目" - >"属性" - >"配置属性" - >"C/C++" - >"通用" - >"SDL"检查中" 否"(/ sdl-)

现在我收到一条错误消息说

Warning C4603   '_WINSOCK_DEPRECATED_NO_WARNINGS': macro is not defined or definition is different after precompiled header
Run Code Online (Sandbox Code Playgroud)

最后我试着实施

inet_pton(AF_INET, HELLO_GROUP, (PVOID *)(&mreq.imr_multiaddr.s_addr));
Run Code Online (Sandbox Code Playgroud)

代替

mreq.imr_multiaddr.s_addr = inet_addr(HELLO_GROUP);
Run Code Online (Sandbox Code Playgroud)

我需要理解为什么即使在添加_WINSOCK ...宏之后错误也没有解决.

提前致谢.

winsock visual-c++

9
推荐指数
2
解决办法
3万
查看次数

不允许使用多个模板参数列表

这是什么问题?

struct fbe {
    char *fbtName;
    template<typename T, typename... vT> 
    T(*funcptr)(T, vT... );
};
Run Code Online (Sandbox Code Playgroud)

在这样写的时候编译的区别是什么?

template<typename T, typename... vT>
struct fbe {
    char *fbtName;
    T(*funcptr)(T, vT... );
};
Run Code Online (Sandbox Code Playgroud)

我是使用模板功能的新手.

c++ templates variadic-templates

3
推荐指数
1
解决办法
1418
查看次数

将缓冲区复制到struct时丢失数据

我有一个TCP服务器套接字,它接收一个16字节的请求消息.请求消息将具有多个字段,并且基于我需要进行不同操作的字段值.

当我尝试将缓冲区复制到struct时,我可以看到丢失的数据.我尝试了所有可能的方法,但无法弄清楚我是否需​​要进行结构填充.

我的结构看起来像,

struct stRequestMsg {
    uint16_t startTag;
    uint32_t messageSize;
    uint16_t messageID;
    uint16_t sequenceNumber;
    uint16_t messageType;
    uint32_t reserved;
};
Run Code Online (Sandbox Code Playgroud)

我所做的就是,

char buff[1024]
result = static_cast<int>(recv(sockDesc, buff, sizeof(stRequestMsg), 0));
    if (0 < result) {

        printf("\n Actual value on buffer");
        for (int i = 0; i < result; i++)
        {
            printf("\n buff[%d] = 0x%x", i,buff[i]);
        }

        reqMessage = *(stRequestMsg *)buff;
        printf("\n RESULT of reqMessage = *(stRequestMsg *)buff;");
        printf("\nstartTag : 0x%x", reqMessage.startTag);
    printf("\nmessageSize : 0x%x", reqMessage.messageSize);
    printf("\nmessageID : 0x%x", reqMessage.messageID);
    printf("\nsequenceNumber : 0x%x", …
Run Code Online (Sandbox Code Playgroud)

c++ struct

0
推荐指数
1
解决办法
83
查看次数