leo*_*n22 4 sockets windows visual-c++
根据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];
};
Run Code Online (Sandbox Code Playgroud)
但需要这个结论:
struct sockaddr {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
Run Code Online (Sandbox Code Playgroud)
哪些变化是必要的?
(Ws2_32.lib是链接的,以下包括
#define WIN32_LEAN_AND_MEAN
// sockets
#include "windows.h"
#include <winsock2.h>
#include <ws2tcpip.h>
Run Code Online (Sandbox Code Playgroud)
谢谢
在套接字API中,要使用的地址结构取决于协议.如果您使用的是IPv4,那么您需要的结构就是sockaddr_in.
套接字API很久以前出现时void *不符合标准.指针sockaddr上被广泛使用的插座功能完全相同的方式,我们将使用void *指针.这些函数希望您将指针传递给与您使用的协议相关的结构.令人不快的是,每当你将指针传递给你的地址结构时,你都需要一个演员,但你无能为力.
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 )
{
//....
}
Run Code Online (Sandbox Code Playgroud)