赞
踩
套接字应用程序编程接口是网络应用程序通过网络协议栈进行通信时所使用的接口,即应用程序与协议栈软件之间的接口,简称套接字编程接口(Socket API)。它定义了应用程序与协议栈软件进行交互时可以使用的一组操作,决定了应用程序使用协议栈的方式、应用程序所能实现的功能、以及开发具有这些功能的程序的难度
通信域:是一个计算机网络的范围,在这个范围中,所有的计算机使用同一种网络体系结构,使用同一种协议栈
套接字存在于通信域中,通信域是为了处理一般的进程通过套接字通信而引入的一种抽象概念,套接字通常只和同一域中的套接字交换数据。如果数据交换要穿越域的边界,就一定要执行某种解释程序。现在,仅仅针对Internet域,并且使用Internet协议簇来通信
数据报套接字(Datagram Socket)提供无连接的不保证可靠的独立的数据报传输服务。在Internet通信域中,数据报套接字使用UDP数据报协议形成的进程间通路,具有UDP协议为上层所提供的服务的所有特点。
流式套接字(Stream Socket)提供双向的、有序的、无重复的、无记录边界的可靠的数据流传输服务。在Internet通信域中,流式套接字使用TCP协议形成的进程间通路,具有TCP协议为上层所提供的服务的所有特点,在使用流式套接字传输数据之前,必须在数据的发送端和接收端之间建立连接。
原始式套接字(Raw Socket)允许对较低层次的协议,如IP、ICMP直接访问,用于检验新的协议的实现。
struct sockaddr {
unsigned short sa_family; //Socket address family.
char sa_data[14]; //Maximum size of all the different socket address structures.
};
VS文档介绍:
The SOCKADDR structure is used to store an Internet Protocol (IP) address for a machine participating in a Windows Sockets communication
要求
Header: winsock2.h
2.SOCKADDR Structure
struct sockaddr_in{
short sin_family; //Address family (must be AF_INET).
unsigned short sin_port; //IP port.
struct in_addr sin_addr; //IP address.
char sin_zero[8]; //Padding to make structure the same size as SOCKADDR.
};
VS文档介绍:
This is the form of the SOCKADDR structure specific to the Internet address family and can be cast to SOCKADDR.
The IP address component of this structure is of type IN_ADDR. The IN_ADDR structure is defined in Windows Sockets header file WINSOCK.H as follows:
struct in_addr {
union {
struct{
unsigned char s_b1,
s_b2,
s_b3,
s_b4;
} S_un_b;
struct {
unsigned short s_w1,
s_w2;
} S_un_w;
unsigned long S_addr;
} S_un;
};
要求:
Header: winsock2.h
网络字节顺序是TCP/IP规定好的一种数据表示格式,它与具体的CPU类型、操作系统无关,从而可以保证数据在不同主机之间传输时能被正确解释。网络字节顺序采用低位字节排放在内存的低地址端,高位字节排放在内存的高地址端排序方式
本机字节顺序具体计算机中的多字节数据存储顺序
网络应用程序要在不同的计算机中运行,本机字节顺序是不同的,但是,网络字节顺序是相同的。所以,应用程序在编程的时候,在把IP地址和端口号装入套接字的时候,应当把它们从本机字节顺序转换为网络字节顺序;相反,在本机输出时,应将它们从网络字节顺序转换为本机字节顺序
htons() 短整数本机顺序转换为网络顺序,用于端口号
htonl() 长整数本机顺序转换为网络顺序,用于IP地址
ntohs()短整数网络顺序转换为本机顺序,用于端口号
ntohl() 长整数网络顺序转化为本机顺序,用于IP地址
这四个函数将被转换的数值作为函数的参数,函数返回值是转换后的结果
在因特网中,IP地址常常用点分十进制的表示方法,但在套接字中,IP地址是无符号的长整型数,套接字编程接口设置了两个函数,专门用于两种形式的IP地址的转换
unsigned long inet_addr(const char* cp)
入口参数cp:点分十进制形式的IP地址
返回值: 网络字节顺序的IP地址,是无符号的长整数
char * inet_ntoa(struct in_addr in)//结构体转化为IP地址
入口参数in:包含长整型IP地址的 in_addr 结构变量
返回值: 指向点分十进制IP地址的字符串的指针
struct hostent* gethostbyname(const char * name)
入口参数:是站点的主机域名字符串,
返回值: 是指向hostent 结构的指针
hostent结构包含主机名、主机别名数组、返回地址的类型(一般是AF-INET)、地址长度的字节数、已符合网络字节顺序的主机网络地址等
//以上内容大部分摘自《网络编程实用教程(第三版)》 编者 段利国 刘金江 倪天伟 叶树华
//侵权必删
//仅供参考
//windows网络编程
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。