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)

最新文章

  1. python 装饰器的理解
  2. Windows安装和使用zookeeper
  3. 【腾讯Bugly干货分享】微信mars 的高性能日志模块 xlog
  4. 解决Strokeit在win8下的图标问题和开机启动问题
  5. 1、CC2541蓝牙4.0芯片中级教程——基于OSAL操作系统的运行流程了解+定时器和串口例程了解
  6. ssh连接linux服务器只显示-bash-4.1#不显示路径解决方法
  7. jQuery显示隐藏动态效果的几种写法
  8. python 图片上添加数字源代码
  9. SWT中各种参数大全
  10. C# 字符串知识整理
  11. [UT]Unit Test理解
  12. 初窥DB2之insert语句
  13. 安装atlas后执行hive命令报错
  14. spring boot 错误,求大神帮解决
  15. mac版chrome升级到Version 65.0.3325.18后无法打开百度bing搜狗
  16. 工控随笔_07_西门子_WinCC利用命令行实现操作log日志
  17. 关于五子棋游戏java版
  18. zjoi2017 仙人掌
  19. Jenkins打包安卓时提示没同意constraintLayout的license的解决方法
  20. Glow 效果材质

热门文章

  1. LR字符串处理函数-lr_save_var
  2. 如何用Python从海量文本抽取主题?
  3. 记录一次Flink作业异常的排查过程
  4. c++_primer_第4版目录
  5. 面试问Redis集群,被虐的不行了......
  6. selenium3.0-selenium发展史
  7. [强化学习]Part1:强化学习初印象
  8. JavaScript基础-自己定义自己的函数(016)
  9. windows 下搭建 MQTT 服务
  10. 注册中心(Eureka/Consul)