- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
根据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/
我正在从 Ubuntu 机器上的 python 向 vxworks 机器上的 C 程序发送一条 UDP 消息。 vxworks 机器上的 Endianness 与网络字节顺序不匹配,因此我被迫使用 n
如果我正在使用 struct sockaddr_in,地址族已经在我创建的任何套接字中指定。 此外,如果 sin_family 成员必须始终为 AF_INET,则使用 sin_family 成员似乎是
下面是一个有效的套接字创建示例(在 C 中): // Construct local address structure struct sockaddr_in servAddr;
我是 UNIX 套接字编程的新手,我想知道 sin_addr、sin_family 等中的“sin”是什么,简称?在 struct socketaddr_in 中“in”是什么意思或缩写是什么? 谢谢
这是我的问题: 我试图用适当的信息填充套接字地址结构,以便我可以在处理服务器和客户端之间通信的程序中使用它。这是服务器代码的一部分。问题是它会出现段错误。当我运行 gdb 时,它说当我将 AF_INE
我是 C 编程中的新网络套接字。我正在尝试制作一个简单的服务器 - 客户端。以下是我想要的: ... //Binding to a port struct sockaddr_in name; name
我是一名优秀的程序员,十分优秀!