当前位置: 首页 > wzjs >正文

论坛备案网站名称wordpress 内容 管理员查看

论坛备案网站名称,wordpress 内容 管理员查看,html毕业设计题目大全,99企业邮箱一些概念 简单了解一下TCP,UDP这两个协议,和一些概念 TCP与UDP 学校教过TCP是 传输层协议有连接可靠传输面向字节流 而UDP是 传输层协议无连接不可靠传输面向数据报 当时完全不知道这些什么意思 网络字节序 网络通信,要接收和发送数据。我们知道…

一些概念

简单了解一下TCP,UDP这两个协议,和一些概念

TCP与UDP

学校教过TCP是

  • 传输层协议
  • 有连接
  • 可靠传输
  • 面向字节流


而UDP是

  • 传输层协议
  • 无连接
  • 不可靠传输
  • 面向数据报

当时完全不知道这些什么意思

网络字节序

网络通信,要接收和发送数据。我们知道机器分为大端和小端存储,那传输数据的时候就需要一个固定的标准,防止出错。
于是有了:TCP/IP规定的网络字节序,低地址高字节

1.发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出;
接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存;
2.因此,网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址.
TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节. 不管这台主机是大端机还是小端机,
都会按照这个TCP/IP规定的网络字节序来发送/接收数据;
3.如果当前发送主机是小端, 就需要先将数据转成大端; 否则就忽略, 直接发送即可;

在这里插入图片描述

主机序列与网络序列的相互转换

在头文件<arpa/inet.h> 给了4个接口

函数含义作用
htonshost to network short本地主机的 16 位整数转为网络序
htonlhost to network long本地主机的 32 位整数转为网络序
ntohsnetwork to host short网络序的 16 位整数转为主机序
ntohlnetwork to host long网络序的 32 位整数转为主机序

Socket编程

sockaddr

sockaddr是网络通信的通用结构体

struct sockaddr {sa_family_t sa_family; // 地址族(协议族),如 AF_INETchar sa_data[14];      // 协议地址(具体内容依赖于地址族)
};

还有另外两个结构体:

  1. sockaddr_in
struct sockaddr_in {sa_family_t sin_family;   // 地址族,必须是 AF_INETuint16_t sin_port;        // 端口号(网络字节序)struct in_addr sin_addr;  // IP 地址char sin_zero[8];         // 填充字节,保持与 sockaddr 一致
};

特别提示: sin_addr
结构体in_addr封装如下

struct in_addr {in_addr_t s_addr; // IPv4 地址,32 位,网络字节序
};

所以赋值的时候:要对s_addr进行操作

addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 点分十进制转网络字节序

地址类型给AF_INET,表示网络通信
2. sockadd_un

struct sockaddr_un {sa_family_t sun_family;     // 地址族,必须是 AF_UNIXchar sun_path[108];         // 本地文件路径,作为套接字标识
};

地址类型给AF_UNIX,表示本地通信
在这里插入图片描述

IP地址格式

IP地址有点分十进制(“127.0.0.1”)和十六进制4字节序列(0xC0A80101)

点分十进制是为了方便阅读,但是,s_addr是4字节序列的格式,像下面这样

addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 点分十进制转网络字节序

就需要调用函数来进行转换

函数作用
inet_aton点分十进制 → 4 字节网络序
inet_ntop4 字节网络序 → 点分十进制
in_addr_t inet_addr(const char *cp);

网络字节序再转换一次?

转换为4字节序列后,需要转换成网络字节序再存入sockaddr_in

好消息,好消息!
inet_addr先完成转换到4字节序列,再转换为网络字节序

// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)
int socket(int domain, int type, int protocol);
// 绑定端口号 (TCP/UDP, 服务器)
int bind(int socket, const struct sockaddr *address,
socklen_t address_len);
// 开始监听socket (TCP, 服务器)
int listen(int socket, int backlog);
// 接收请求 (TCP, 服务器)
int accept(int socket, struct sockaddr* address,
socklen_t* address_len);
// 建立连接 (TCP, 客户端)
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);

补充:内存置0另一种方法(bzero与memset)

memset很常用,这里补充一个新的接口

void bzero(void *s, size_t n);
//s:指向要清零的内存块的起始地址。
//n:要清零的字节数。

举个例子

struct sockaddr_in addr;
bzero(&addr, sizeof(addr));

他等价于

memset(&addr, 0, sizeof(addr));

当然:依然推荐用memset
因为bzero 在 POSIX 标准中已废弃

小结

介绍了socket基本概念和socket初始化的操作

http://www.dtcms.com/wzjs/809983.html

相关文章:

  • 聊城网站优化技术岱山县建设局网站
  • 汽车网站页面布局设计快速优化seo软件
  • 有什么可以在线做奥数题的网站百度推广账号登录
  • 哈尔滨网站建设招聘wordpress 4.9.7 中文
  • 织梦网站怎么做开发手游
  • 怎样做企业官方网站如何自学网站制作
  • 南京做网站哪家公司好在线平台
  • 怎么设计网站页面在线做海报的网站
  • 个人网站需不需要搭建服务器做淘宝那样的网站要多少钱
  • 廊坊哪里做网站好广西壮族自治区学生资助管理中心
  • 网站建设新闻发布企业网站建设推广含义
  • 如何做网站栏目规划公司app开发收费价目表
  • 网站建设策略阿里巴巴网站直播怎么做的
  • 做本地网站北京企业网站seo
  • 淘宝网站制作多少钱便利的邯郸网站建设
  • 无锡中英文网站建设网页界面设计和网页设计的差异表现在哪些方面
  • 帮别人做设计图的网站手机制作gif
  • 男的做直播哪个网站好app地图下载安装
  • 好的优化网站推广公司做我女朋友的表白句的网站
  • 咸阳网站制作公司seo关键词优化培训
  • 怎么做qq代挂网站wordpress ftp下载
  • 微信公众号电商网站开发社交系统开发
  • 个人网站设计论文范文关键词app
  • 互联网app网站建设方案模板咖啡网站建设的需求分析
  • 常州网站建设常州做网站一定要购买虚拟主机吗
  • 建设工程教育网官方网站房地产网站建设解决方案
  • 电商网站 设计做电影网站要怎么拿到版权
  • 虚拟主机手机网站小欢喜林磊儿什么网站做家教
  • 让你有做黑客感觉的网站广西建设协会网站首页
  • ui中国设计网站页面h5商城网站建站