加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – Struct sockaddr,sin_family不是成员

发布时间:2020-12-14 03:58:35 所属栏目:Windows 来源:网络整理
导读:根据msdn的这篇文章( http://msdn.microsoft.com/en-us/library/windows/desktop/ms740496(v=vs.85).aspx)结构根据选择的协议而变化! 现在我想使用http://www.intelliproject.net/articles/showArticle/index/check_tcp_udp_port中的代码来检查端口是否打开
根据msdn的这篇文章(
http://msdn.microsoft.com/en-us/library/windows/desktop/ms740496(v=vs.85).aspx)结构根据选择的协议而变化!

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

现在我有struct 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中,要使用的地址结构取决于协议.如果您使用的是IPv4,那么您需要的结构是sockaddr_in.

很久以前,当void *不符合标准时,套接字API就出现了.指向sockaddr的指针在整个套接字函数中使用,与我们使用void *指针的方式完全相同.这些函数希望您将指针传递给与您使用的协议相关的结构.令人不快的是,每当你将指针传递给你的地址结构时,你都需要一个演员,但你无能为力.

IPv4示例:

struct sockaddr_in address;

// ...

memset( &address,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 )
{
   //....
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读