我正在尝试使用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 ...宏之后错误也没有解决.
提前致谢.
这是什么问题?
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)
我是使用模板功能的新手.
我有一个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)