windows socket 套接字 学习笔记

一, 寻址方式(IP地址表示)


在Windows Socket API 中,用户可以使用TPC/IP 地址家族中统一的套接字地址结构去处理 TCP/IP 中的寻址问题, 相关结构如下:

struct sockaddr_in{
	short          sin_family; //指定地址家族
	unsigned       sin_port;   //端口号码
	struct in_addr sin_addr;   //IP地址
	char           sin_zero[8] //备用,常作0
}

备注:因为是涉及到TCP/IP 相关编程,因此 sin_family 必须指定为 AF_INET.


结构变量sin_addr表示32位的IP地址, 结构定义如下:

struct in_addr
{
	union{
		struct{
			unsigned char s_b1, s_b2, s_b3, s_b4;  //用4个u_char字符描述IP地址
		}S_un_b;
		struct{
			unsigned short s_w1, s_w2; //用2个u_short类型描述IP地址
		}S_un_w;
		struct{
			unsigned long s_addr;  //用1个u_long类型描述IP地址
		}S_un;
	}
}


通常情况下用户会使用1个u_long类型表示IP地址,如要描述IP地址"127.0.0.1" 的代码如下:

sockaddr_in addr
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");


二, 字节顺序

在Socket套接字编程中,传输数据的排列顺序分为: 网络字节顺序主机字节顺序 两种.

从数据角度来看,

网络字节顺序 会将数据中重要的字节先进行存储,

主机字节顺序 会将数据中不重要的字节先进行存储.

通常情况下,

若用户需要通过网络发送数据,则需要将数据转换成网络字节顺序排列,

若用户需要将从网络接收到的数据存储到本地主机上,则需要将数据转换成主机字节顺序排列.


以下几个函数可以进行网络字节顺序及主机字节顺序之间的转换:


u_short htons(u_short hostshort); // 将一个u_short类型的IP地址从主机字节顺序转换到网络字节顺序
u_short ntohs(u_short netshort);  // 将一个u_short类型的IP地址从网络字节顺序转换到主机字节顺序
u_long htonl(u_long hostlong);  // 将一个u_long类型的IP地址从主机字节顺序转换到网络字节顺序
u_long ntohl(u_long netlong);   // 将一个u_long类型的IP地址从网络字节顺序转换到主机字节顺序
unsigned long inet_addr(const char FAR* cp); // 将一个字符串转换到以网络字节顺序排列的IP地址
char FAR* inet_ntoa(struct in_addr in);      // 将一个网络字节顺序排列的IP地址转换成一个字符串IP


三, Socket套接字 相关函数

 

1.加载套接字库,创建并初始化套接字(socket())

socket()是创建套接字的函数,原型如下:

SOCKET socket(
	int af,	     //指定套接字使用的地址格式,TCP/IP只能设定为AF_INET
	int type,    //套接字类型
	int protocol //如果type已经指定套接字类型为TCP或UDP,则该参数设置为0
);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值