gpt4 book ai didi

windows - struct sockaddr,sin_family不是成员

转载 作者:可可西里 更新时间:2023-11-01 13:54:50 24 4
gpt4 key购买 nike

根据msdn的这篇文章( http://msdn.microsoft.com/en-us/library/windows/desktop/ms740496(v=vs.85).aspx ) 结构因选择的协议(protocol)而异!

现在我想使用 http://www.intelliproject.net/articles/showArticle/index/check_tcp_udp_port 中的这段代码检查端口是否打开!

现在我有如下结构 sockaddr:

struct sockaddr {
ushort sa_family;
char sa_data[14];
};

但需要这个结构:

struct sockaddr {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};

哪些变化是必要的?

(Ws2_32.lib 已链接,以下包括

#define WIN32_LEAN_AND_MEAN

// sockets
#include "windows.h"
#include <winsock2.h>
#include <ws2tcpip.h>

谢谢

最佳答案

在套接字 API 中,要使用的地址结构取决于协议(protocol)。如果您使用的是 IPv4,则您需要的结构是 sockaddr_in

void * 不是标准时,套接字 API 很早以前就出现了。指向sockaddr 的指针在整个套接字函数中的使用方式与我们使用void * 指针的方式完全相同。这些函数希望您将指针传递给与您使用的协议(protocol)相关的结构。令人不快的是,每当您将指针传递给您的地址结构时,您都需要强制转换,但您对此无能为力。

IPv4 示例:

struct sockaddr_in address;

// ...

memset( &address, 0, sizeof(address) );

address.sin_family = AF_INET;
address.sin_port = htons(1100);
address.sin_addr.s_addr = INADDR_ANY;

if ( bind( sock, (struct sockaddr *)&address, sizeof(address) ) < 0 )
{
//....
}

关于windows - struct sockaddr,sin_family不是成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13047846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com