TCP/IP网络编程

learn

创建套接字

1
2
3
4
#include <sys/socket.h>

int socket(int domain,int type,int protocol);

成功返回文件描述符,失败返回-1。
_domain_————协议簇信息
_type_——————数据传输类型信息
_protocol_———-协议信息

地址簇

1
2
3
4
5
6
7
8
9
10
11
struct sockaddr_in
{
sa_family_t sin_family; //地址簇
uint16_t sin_port; //16位端口号
struct in_addr sin_addr; //32位IP地址
char sin_zero[8]; //不用
}
struct in_addr
{
In_addr_t s_addr; //32位IPv4地址
}

系统不同,在内存空间的保存方式是不同的。

大端序 00000001 00000000 00000000 00000000
小端序 00000000 00000000 00000000 00000001

为了实现不同系统之间传输数据不出错,约定传输到网络上的都是大端序,这种约定被称为网络字节序

转换字节序

1
2
3
4
unsigned short htons(unsigned short);		//h主机,n网络,h,to,n。s,16位端口号
unsigned short ntohs(unsigned short); //
unsigned long htonl(unsigned long); //h主机,n网络,h,to,n。l,32位IP地址
unsigned long ntohl(unsigned long); //

但是我们所熟知的IP大多以字符串形式出现,以下函数则可以将字符串转化位32位整数型
1
2
3
#include <arpa/inet.h>

int inet_aton(const char *string,struct in_addr *addr);

_string_———-IP字符串信息
_addr_————结果保存地点的地址

inet_aton将IP字符串转化为32位整型并保存在addr结构体变量中。

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2024 lucky_dog
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信