WinSock数据结构:
在VC的头文件winsock.h和winsock2.h中定义了许多常数、变量类型和数据结构:
1、动态链接库关联的数据结构WSAData:(winsock2.h中的定义,winsock.h中的定义类似)
#define WSADESCRIPTION_LEN 256
#define WSASYS_STATUS_LEN 128
typedef struct WSAData {
WORD wVersion; //winsock版本
WORD wHighVersion; //系统可以支持的最高版本
char szDescription[WSADESCRIPTION_LEN+1];
//可能需要的winsock信息(最多256个的非终止字符串)
char szSystemStatus[WSASYS_STATUS_LEN+1]; //状态和配置信息
unsigned short iMaxSockets; //预留后向兼容的,版本2不用的
unsigned short iMaxUdpDg; //同上,预留用于后向兼容
char FAR * lpVendorInfo; //同上
} WSADATA, FAR * LPWSADATA;
2、用于说明网络寻址信息的sockaddr地址结构:
/*
* Structure used by kernel to store most
* addresses.
*/
struct sockaddr {
u_short sa_family; /* address family , AF_INET表示套接字处于Internet域*/
char sa_data[14]; /* up to 14 bytes of direct address */
};
/*
* Socket address, internet style.
*/
struct sockaddr_in {
short sin_family;
u_short sin_port; //两个字节服务端口地址,缺省为0时自动分配
//1024~5000之间的数值,网络字节顺序
struct in_addr sin_addr; //四字节IP地址,无符号类型
char sin_zero[8]; //与sockaddr结构sa_data字段的长度保留一致
//只充当填充项的作用
};
/*
* Internet address (old style... should be updated)
*/
struct in_addr {
union {
struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
struct { u_short s_w1,s_w2; } S_un_w;
u_long S_addr;
} S_un;
#define s_addr S_un.S_addr
/* can be used for most tcp & ip code */
#define s_host S_un.S_un_b.s_b2
/* host on imp */
#define s_net S_un.S_un_b.s_b1
/* network */
#define s_imp S_un.S_un_w.s_w2
/* imp */
#define s_impno S_un.S_un_b.s_b4
/* imp # */
#define s_lh S_un.S_un_b.s_b3
/* logical host */
};
/*
* SockAddr Information
*/
typedef struct _SOCKET_ADDRESS {
LPSOCKADDR lpSockaddr ; //指向套接字地址
INT iSockaddrLength ; //套接字地址长度(字节)
} SOCKET_ADDRESS, *PSOCKET_ADDRESS, FAR * LPSOCKET_ADDRESS ;
3、用于存放或返回主机信息的hosten结构:
/*
* Structures returned by network data base library, taken from the
* BSD file netdb.h. All addresses are supplied in host order, and
* returned in network order (suitable for use in system calls).
*/
struct hostent {
char FAR * h_name; /* official name of host,域名系统可返回应答 */
char FAR * FAR * h_aliases; /* alias list 多名数组*/
short h_addrtype; /* host address type 返回的地址类型*/
short h_length; /* length of address 返回的地址长度(字节)*/
char FAR * FAR * h_addr_list;
/* list of addresses 用于主机网络字节顺序的地址表*/
#define h_addr h_addr_list[0] /* address, for backward compat */
};
4、用于存放或返回给定服务名字的服务名和服务号的servent结构:
struct servent {
char FAR * s_name; /* official service name 服务的官方名字*/
char FAR * FAR * s_aliases; /* alias list 非空字符的别名数组*/
short s_port; /* port # 网络顺序的服务对应的端口号*/
char FAR * s_proto; /* protocol to use 服务应用的协议名*/
};
5、用于存放或返回给定协议信息的protoent结构:
struct protoent {
char FAR * p_name; /* official protocol name 协议的官方名字*/
char FAR * FAR * p_aliases; /* alias list 非空字符的别名数组*/
short p_proto; /* protocol # 主机顺序的协议号*/
};
6、用于select()函数的套接字分类fd_set和timeval结构:
typedef struct fd_set {
u_int fd_count; /* how many are SET?集合中套接字个数 */
SOCKET fd_array[FD_SETSIZE];
/* an array of SOCKETs 在集合中的套接字数组,其中FD_SETSIZE=64*/
} fd_set;
/*
* Structure used in select() call, taken from the BSD file sys/time.h.
*/
struct timeval {
long tv_sec; /* seconds 等待时间秒*/
long tv_usec; /* and microseconds 等待时间微秒*/
};
7、用于组播绑定的ip_mreq结构:
/*
* Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
*/
struct ip_mreq {
struct in_addr imr_multiaddr;
/* IP multicast address of group 加入的组播IP地址*/
struct in_addr imr_interface;
/* local IP address of interface 加入组播的本地单播IP地址*/
};
8、包含命名空间提供者注册信息的WSANAMESPACE_INFO结构:
ANSI版本:
typedef struct _WSANAMESPACE_INFOA {
GUID NSProviderId; //命名空间提供者的唯一标识符
DWORD dwNameSpace; //提供者实现支持的命名空间
BOOL fActive; //表示提供者是否处于活动状态
DWORD dwVersion; //命名空间的版本标识符
LPSTR lpszIdentifier; //提供者的显示字符串
} WSANAMESPACE_INFOA, *PWSANAMESPACE_INFOA, *LPWSANAMESPACE_INFOA;
UNICODE版本:
typedef struct _WSANAMESPACE_INFOW {
GUID NSProviderId;
DWORD dwNameSpace;
BOOL fActive;
DWORD dwVersion;
LPWSTR lpszIdentifier;
} WSANAMESPACE_INFOW, *PWSANAMESPACE_INFOW, *LPWSANAMESPACE_INFOW;
9、包含协议链目录项识别符的计数表WSAPROTOCOLCHAIN:
#define MAX_PROTOCOL_CHAIN 7
typedef struct _WSAPROTOCOLCHAIN {
int ChainLen; /* the length of the chain, */
/* length = 0 means layered protocol, 分层协议*/
/* length = 1 means base protocol, 基本协议*/
/* length > 1 means protocol chain 其他协议链*/
DWORD ChainEntries[MAX_PROTOCOL_CHAIN];
/* a list of dwCatalogEntryIds 协议链项的数组*/
} WSAPROTOCOLCHAIN, FAR * LPWSAPROTOCOLCHAIN;
10、定义套接字特性的WSAPROTOCOL_INFO结构:
#define WSAPROTOCOL_LEN 255
ANSI版本:
typedef struct _WSAPROTOCOL_INFOA {
DWORD dwServiceFlags1; //协议提供服务组合
DWORD dwServiceFlags2; //预留给附加的协议属性定义
DWORD dwServiceFlags3; //预留给附加的协议属性定义
DWORD dwServiceFlags4; //预留给附加的协议属性定义
DWORD dwProviderFlags; //提供这个协议怎样表示协议目录的信息
GUID ProviderId; //全球唯一指定的服务提供方标识符
DWORD dwCatalogEntryId; //为每个这样的结构分配的唯一标识符
WSAPROTOCOLCHAIN ProtocolChain; //对应协议的WSAPROTOCOLCHAIN结构
int iVersion; //协议版本标识符
int iAddressFamily; //协议地址族
int iMaxSockAddr; //最大地址长度,字节为单位
int iMinSockAddr; //最小地址长度,字节为单位
int iSocketType; //套接字类型值
int iProtocol; //协议值
int iProtocolMaxOffset; //指定协议值最大偏移量
int iNetworkByteOrder; //用0和1分别代表big-Endian和little-Endian
int iSecurityScheme; //暗示采用安全机制的类型
DWORD dwMessageSize; //协议支持的最大消息大小,字节为单位
DWORD dwProviderReserved; //预留给服务提供方使用
CHAR szProtocol[WSAPROTOCOL_LEN+1]; //人可识别的协议名
} WSAPROTOCOL_INFOA, FAR * LPWSAPROTOCOL_INFOA;
UNICODE版本:
typedef struct _WSAPROTOCOL_INFOW {
DWORD dwServiceFlags1;
DWORD dwServiceFlags2;
DWORD dwServiceFlags3;
DWORD dwServiceFlags4;
DWORD dwProviderFlags;
GUID ProviderId;
DWORD dwCatalogEntryId;
WSAPROTOCOLCHAIN ProtocolChain;
int iVersion;
int iAddressFamily;
int iMaxSockAddr;
int iMinSockAddr;
int iSocketType;
int iProtocol;
int iProtocolMaxOffset;
int iNetworkByteOrder;
int iSecurityScheme;
DWORD dwMessageSize;
DWORD dwProviderReserved;
WCHAR szProtocol[WSAPROTOCOL_LEN+1];
} WSAPROTOCOL_INFOW, FAR * LPWSAPROTOCOL_INFOW;
11、允许对数据缓冲区创建和操作的WSABUF结构:
typedef struct _WSABUF {
u_long len; /* the length of the buffer,字节为单位 */
char FAR * buf; /* the pointer to the buffer */
} WSABUF, FAR * LPWSABUF;
12、作为启动与完成重叠I/O之间通信媒介的WSAOVERLAPPED结构:
typedef struct _WSAOVERLAPPED {
DWORD Internal; //预留给内部实现重叠I/O的实体
DWORD InternalHigh; //预留给内部实现重叠I/O的实体
DWORD Offset; //预留给服务提供方
DWORD OffsetHigh; //预留给服务提供方
WSAEVENT hEvent; //如果存在例程,用于WSAEVENT结构事件,否则为null
} WSAOVERLAPPED, FAR * LPWSAOVERLAPPED;
13、包含特定服务类的WSAServiceClassInfo结构:
ANSI版本
typedef struct _WSAServiceClassInfoA
{
LPGUID lpServiceClassId; //服务类的唯一标识符
LPSTR lpszServiceClassName; //服务类对应的熟知名
DWORD dwCount; //服务信息的项数
LPWSANSCLASSINFOA lpClassInfos; //WSANSCLASSINFO结构指针
}WSASERVICECLASSINFOA, *PWSASERVICECLASSINFOA, *LPWSASERVICECLASSINFOA;
UNICODE版本:
typedef struct _WSAServiceClassInfoW
{
LPGUID lpServiceClassId;
LPWSTR lpszServiceClassName;
DWORD dwCount;
LPWSANSCLASSINFOW lpClassInfos;
}WSASERVICECLASSINFOW, *PWSASERVICECLASSINFOW, *LPWSASERVICECLASSINFOW;
14、给定服务信息的WSAQUERYSET结构:
ANSI版本:
typedef struct _WSAQuerySetA
{
DWORD dwSize; //必须设为WSAQUERYSET结构大小
LPSTR lpszServiceInstanceName; // 引用包含服务名的字符串
LPGUID lpServiceClassId; //对应服务类的GUID
LPWSAVERSION lpVersion; //引用的版本号(可选)
LPSTR lpszComment; //查询忽略的注释
DWORD dwNameSpace; //约束或没有约束NS_ALL名字空间的标识符
LPGUID lpNSProviderId; //引用具体命名空间提供方GUID(可选)
LPSTR lpszContext; //引用分级命名空间查询的起点(可选)
DWORD dwNumberOfProtocols; //下面数组的大小(字节为单位)
LPAFPROTOCOLS lpafpProtocols; //引用AFPROTOCOLS结构数组(可选)
LPSTR lpszQueryString; //引用包含SQL查询文本字符串(可选)
DWORD dwNumberOfCsAddrs; //查询忽略
LPCSADDR_INFO lpcsaBuffer; //查询忽略
DWORD dwOutputFlags; //查询忽略
LPBLOB lpBlob; //指向提供方特定的实体
} WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA;
UNICODE版本:
typedef struct _WSAQuerySetW
{
DWORD dwSize;
LPWSTR lpszServiceInstanceName;
LPGUID lpServiceClassId;
LPWSAVERSION lpVersion;
LPWSTR lpszComment;
DWORD dwNameSpace;
LPGUID lpNSProviderId;
LPWSTR lpszContext;
DWORD dwNumberOfProtocols;
LPAFPROTOCOLS lpafpProtocols;
LPWSTR lpszQueryString;
DWORD dwNumberOfCsAddrs;
LPCSADDR_INFO lpcsaBuffer;
DWORD dwOutputFlags;
LPBLOB lpBlob;
} WSAQUERYSETW, *PWSAQUERYSETW, *LPWSAQUERYSETW;
15、对注册命名空间调用规定完成通知配置:
typedef struct _WSACOMPLETION {
WSACOMPLETIONTYPE Type; //请求的完成通知类型
union {
struct {
HWND hWnd; //消息窗口句柄
UINT uMsg; //指定接收消息的名字
WPARAM context; //句柄或消息背景参数(windows数据类型)
} WindowMessage;
struct {
LPWSAOVERLAPPED lpOverlapped;
//指向WSAOVERLAPPED结构的指针
} Event;
struct {
LPWSAOVERLAPPED lpOverlapped; //指向WSAOVERLAPPED结构的指针
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc;
//完成例程地址
} Apc;
struct {
LPWSAOVERLAPPED lpOverlapped; //指向WSAOVERLAPPED结构的指针
HANDLE hPort; //指向端口的句柄
ULONG_PTR Key; //指向一个密钥
} Port;
} Parameters;
} WSACOMPLETION;
16、存放地址和无连接和面向连接套接字选项控制信息的WSAMSG结构:
typedef struct _WSAMSG {
LPSOCKADDR name; //无连接服务存放远端地址信息
INT namelen; //远端地址信息长度
LPWSABUF lpBuffers; //指向WSABUF结构指针用于接收消息数据
//允许多缓冲区分散/收集I/O数据
DWORD dwBufferCount; //指向一个或更多的控制标志(MSG_BCAST广播、
//MSG_MCAST多播、MSG_TRUNC截取的数据报、MSG_CTRUNC截取的控制数据)
WSABUF Control; //用于指定控制选项数据的WSABUF结构
DWORD dwFlags; //一个多个控制标志
} WSAMSG, *PWSAMSG, *LPWSAMSG;
17、存储套接字网络事件内部信息的WSANETWORKEVENTS结构:
/*
* WinSock 2 extension -- data type for WSAEnumNetworkEvents()
*/
typedef struct _WSANETWORKEVENTS {
long lNetworkEvents; //指示哪个FD_XXX网络事件出现
int iErrorCode[FD_MAX_EVENTS];
//包含任何错误代码的数组,数组元素的位置由上面的事件确定
} WSANETWORKEVENTS, FAR * LPWSANETWORKEVENTS;
18、提供服务质量的FLOWSPEC结构:
typedef struct _flowspec {
ULONG TokenRate; //指定流操作期间允许数据传送速率
ULONG TokenBucketSize; //给定流方向产生最大信用量(帧大小),字节为单位
ULONG PeakBandwidth; //给定流最大传输速率,字节数/每秒
ULONG Latency; //双方传输最大可接受的延迟,毫秒为单位
ULONG DelayVariation; //分组经历最大和最小延迟之差,毫秒为单位
SERVICETYPE ServiceType; //指定流协商的服务质量等级
ULONG MaxSduSize; //指定流允许或使用的最大分组大小,字节为单位
ULONG MinimumPolicedSize; //指定质量要求的最小分组大小,字节为单位
} FLOWSPEC, *PFLOWSPEC, *LPFLOWSPEC;
分享到:
相关推荐
Winsock数据结构** 在Winsock中,数据通过结构体进行封装,如`sockaddr`用于存储网络地址,`sockaddr_in`是IPv4地址的结构体,而`sockaddr_in6`则是IPv6地址的结构体。这些结构体包含了端口号、IP地址等信息。 **...
`lpWSAData`则用于接收Winsock数据结构的信息,以验证Winsock是否成功初始化。 - **WSACleanup()**:当应用程序完成所有网络操作后,应调用`WSACleanup()`函数来清理和释放Winsock库占用的资源,确保系统的稳定性...
而对于IPv6,应使用`getaddrinfo`函数,它可以处理IPv4和IPv6地址,并返回一个更灵活的数据结构——`struct addrinfo`链表。 除了获取主机名和地址,Winsock API还提供了丰富的网络通信功能,如创建套接字(`socket...
Winsock 使用地址结构来表示网络地址,主要包括三种类型:INET 协议族地址结构、IPv4 协议族地址结构和通用地址结构。 1. INET 协议族地址结构(sockaddr_in) 结构体 sockaddr_in 定义了 INET 协议族地址结构,...
《VB Winsock封包入门试验程序》是一款针对初学者设计的简单示例程序,它旨在帮助用户理解如何使用Visual Basic(VB)中的Winsock控件进行网络通信,特别是关于封包和抓包的基础操作。Winsock是Windows Socket的缩写...
- **参数**:`wVersionRequired`指定所需的Winsock版本,`lpWSAData`用于返回Winsock数据结构。 - **示例**:`int err = WSAStartup(MAKEWORD(2, 2), &wsadata);` 初始化Winsock 2.2版本。 ##### 4. **Socket创建...
`:用于存储Winsock数据结构的信息。 - `sockaddr_in SockAddrIn;`:定义了一个用于接收客户端连接请求的套接字地址结构体。 - `SOCKET CSocket, SSocket;`:`CSocket`为监听套接字,`SSocket`为客户端连接套接字...
这些数据往往通过特定的数据结构来传递,也就是这里的“收发结构体”。在Winsock中,常用的结构体有以下几种: 1. `sockaddr` 结构体:这个结构体用于存储地址信息,比如IP地址和端口号。它的派生类型如`sockaddr_...
5. **数据发送与接收**:`send`和`recv`函数是WinSock中进行数据传输的主要接口。`send`用于将数据发送到已连接的套接字,`recv`用于接收来自连接的套接字的数据。 6. **错误处理**:在WinSock编程中,要时刻关注...
数据结构3.txt 数组完全单元.txt 数组操作.txt 数组递归退出.txt 数组递归退出2.txt 文件加密.txt 文件复制.txt 文件连接.txt 无向图.txt 时间陷阱.txt 杨辉三角形.txt 栈单元加.txt 栈操作.txt 桃子...
`**:这是Winsock数据结构,用于初始化Winsock环境。 6. **`CString strHost = "111.111.111.111";`**:一个字符串变量,用于存储目标主机的IP地址。 7. **`CString DownLoadAddress = ...
3. **地址结构**: 在Winsock2中,IP地址和端口号通常存储在 `sockaddr_in` 结构体中。这个结构体包含了IP地址(sin_addr,IPv4为 `in_addr`,IPv6为 `in6_addr`)、端口号(sin_port)以及地址族(sin_family,通常...
3. **地址结构**:在WinSock中,`struct sockaddr`是一个通用地址结构,但通常我们会使用如`struct sockaddr_in`这样的特定结构体,它们包含IP地址和端口号。例如,`sin_family`定义地址族,`sin_port`设置端口号,`...
没有这个文件,Delphi开发者将无法直接使用Winsock2提供的功能,例如创建套接字、绑定、监听、连接、发送和接收数据等。 WSAIoctl是Winsock2 API中的一个重要函数,全称Windows Socket I/O Control,用于设置或查询...
总结:这篇文档详细阐述了在WINCC环境下,利用WinSock控件实现TCP/IP通信的过程,包括控件的使用、服务器端编程、结构变量的应用以及数据传输与处理。对于希望在WINCC中实现远程通讯的工程师来说,这是一份非常实用...
3. **地址结构** Winsock使用`sockaddr`结构体表示网络地址,如`sockaddr_in`结构体用于IPv4。其中包含IP地址(sin_addr)、端口号(sin_port)和其他信息。 4. **连接与监听** 对于服务器端,使用`bind`函数将套...
Winsock控件是VB6.0中用于网络通信的核心组件,它提供了TCP/IP协议的支持,能够帮助开发者实现客户端与服务器之间的数据传输。Winsock控件包含两个主要部分:控件本身(WSH)和控件的属性、方法和事件,这些都可以...
其中,`send`和`recv`函数是最常用的同步数据传输函数,而异步I/O则依赖于重叠结构和完成端口等技术实现。 5. **错误处理**:由于网络通信的不确定性,错误处理在Winsock2程序设计中尤为重要。开发者需要熟练掌握...
6、主机地址标识的数据结构 7、Socket号与主机地址捆绑 8、WinSock操作模式 9、无连接协议的同步模式编程 10、无连接协议的异步模式编程 11、面向连接协议的同步模式编程 12、面向连接协议的异步模式编程
接收数据`命令从连接的远程主机接收数据,通常需要配合循环结构以接收完整的数据包。 7. **关闭套接字**:当不再需要使用套接字时,使用`网络.关闭套接字`命令释放资源。 8. **清理Winsock**:程序结束前,调用`...