计算机网络学习socket--day1
socket编程
socket可以看成是用户进程与内核网络协议栈的编程接口
socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信
socket全双工通信
在异构系统间进行通信,A主机体系结构可以和B主机的体系结构不同,手机的QQ可以和PC机的QQ通信,硬件可以不同,软件也可以不同。
IPv4套接口地址结构
IPv4套接口地址结构通常也称为“网际套接字地址结构”,它以“sockaddr_in”命名,定义在头文件<netinet/in.h>中
struct sockaddr_in{
uint8_t sin_len;
sa_family_t sin_family;
in_port_addr sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
sin_len:整个sockaddr_in结构体的程度,在4.3BSD-Reno版本之前的第一个成员是sin_family
sin_family:指定该地址家族,在这里必须设为AF_INET(表示IPv4)
sin_port:端口 16位整数
sin_addr:IPv4的地址 32位整数
sin_zero:暂不使用,一般将其设置为0
man 7 ip 查看地址结构形式
通用地址结构用来指定与套接字关联的地址:
struct sockaddr{
uint8_t sin_len;
sa_family_t sin_family;
char sa_data[14];
};
sin_len: 整个sockaddr结构体的长度
sin_family:指定该地址家族
sa_data: 由sin_family决定它的形式
socket可以用于unix域协议
网络字节序
1.字节序
1>大端字节序(Big Endian)
最高有效位(MSB:Most Significant Bit ) 存储于最低内存地址处,最低有效位(LSB:Lowest Significant Bit)存储于最高内存地址处
2>小端字节序(Little Endian)
最高有效位(MSB:Most Significant Bit ) 存储于最高内存地址处,最低有效位(LSB:Lowest Significant Bit)存储于最低地址处
2.主机字节序
不同的主机有不同的字节序,如x86为小端字节序,Motorola 6800为大端字节序,ARM字节序是可配置的。
3.网络字节序
网络字节序规定为大端字节序
字节序转换函数
uint32_t htonl(uint32_t hostlong);//将主机字节序转换为网络字节序
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
说明:在上述的函数中,h代表host(主机);n代表network(网络); s代表short;l代表long
地址转换函数
#include<netinet/in.h>
#include<arpa/lnet.h>
int inet_aton(const char *cp,struct in_addr *inp);
--|| 将点分十进制的ip地址装换网络字节数
in_addr_t inet_addr(const char *cp);
--|| 将点分十进制的ip地址装换为32位的整数
char *inet_ntoa(struct in_addr in);
--|| 将网络字节序地址结构换为点分十进制的ip地址
套接字类型
流式套接字(SOCK_STREAM)-------TCP协议
提供面向连接的、可靠的数据传输服务,数据无差错,无重复的发送,且按发送顺序接受。
数据报式套接字(SOCK_DGRAM)
提供无连接服务。不提供无措保证,数据可能丢失或重复,并且接受顺序混乱。
原始套接字(SOCK_RAW)
最新文章
- python 装饰器的理解
- Windows安装和使用zookeeper
- 【腾讯Bugly干货分享】微信mars 的高性能日志模块 xlog
- 解决Strokeit在win8下的图标问题和开机启动问题
- 1、CC2541蓝牙4.0芯片中级教程——基于OSAL操作系统的运行流程了解+定时器和串口例程了解
- ssh连接linux服务器只显示-bash-4.1#不显示路径解决方法
- jQuery显示隐藏动态效果的几种写法
- python 图片上添加数字源代码
- SWT中各种参数大全
- C# 字符串知识整理
- [UT]Unit Test理解
- 初窥DB2之insert语句
- 安装atlas后执行hive命令报错
- spring boot 错误,求大神帮解决
- mac版chrome升级到Version 65.0.3325.18后无法打开百度bing搜狗
- 工控随笔_07_西门子_WinCC利用命令行实现操作log日志
- 关于五子棋游戏java版
- zjoi2017 仙人掌
- Jenkins打包安卓时提示没同意constraintLayout的license的解决方法
- Glow 效果材质
热门文章
- LR字符串处理函数-lr_save_var
- 如何用Python从海量文本抽取主题?
- 记录一次Flink作业异常的排查过程
- c++_primer_第4版目录
- 面试问Redis集群,被虐的不行了......
- selenium3.0-selenium发展史
- [强化学习]Part1:强化学习初印象
- JavaScript基础-自己定义自己的函数(016)
- windows 下搭建 MQTT 服务
- 注册中心(Eureka/Consul)