30 GroupSock(Port)——live555源码阅读(四)网络

本文由乌合之众 lym瞎编,欢迎转载 blog.cnblogs.net/oloroso
本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso

简介

端口类是用于保存网络端口的,计算机网络端口一般有两种含义,分别是物理意义上的网络设备接口和逻辑意义上的端口。这里指的就是逻辑意义上的端口(特指TCP/IP协议中端口),端口的范围是0到65535(u_int16_t的表示范围)。

Port类只有一个数据成员portNumBits fPortNum,用于保存端口值。保存的是以网络字节序表示的(网络字节序是大端序)。
字节序在这里稍微提一下。字节序分为大端序和小端序。拿这里来说,fPortNum是16bits的,其占了两个字节。假如它代表的内存区块是0x1000和0x1001这两个字节,其保存的内容是0x5678,那么是那个字节表示0x56那个字节是0x78呢?这就涉及到字节序的问题了。通常把低地址保存低位,高地址保存高位的叫做小端序。反之为大端序。

内存地址 小端序表示0x5678 大端序表示 0x5678
0x1001 0x56 0x78
0x1000 0x78 0x56

Port类的定义

 typedef u_int16_t portNumBits;
class Port {
public:
Port(portNumBits num /* in host byte order */); portNumBits num() const // in network byte order
{
return fPortNum;
} private:
portNumBits fPortNum; // stored in network byte order
#ifdef IRIX
portNumBits filler; // hack to overcome a bug in IRIX C++ compiler
#endif
};

Port的构造与全局的 << 运算符重载

构造就是对其内部的fPortNum进行赋值,注意赋值的时候是转换为了网络字节序。htons函数是host to network,return short的意思,将参数num从主机序转换到网络序(可能有的主机序和网络序一致)。所有传参的时候传正常使用的就是了,别传已经转换为网络序的。

 Port::Port(portNumBits num /* in host byte order */) {
fPortNum = htons(num);
}

重载全局的<<是为了使用BasicUsageEnvironment对象来输出端口值的。这里的函数ntohs是htons的反操作,其将网络字节序转为主机字节序。

 UsageEnvironment& operator<<(UsageEnvironment& s, const Port& p) {
return s << ntohs(p.num());
}

30 GroupSock(Port)——live555源码阅读(四)网络的更多相关文章

  1. 32 GroupSock(AddressPortLookupTable)——live555源码阅读(四)网络

    32 GroupSock(AddressPortLookupTable)——live555源码阅读(四)网络 32 GroupSock(AddressPortLookupTable)——live555 ...

  2. 28 GroupSock(NetAddress)——live555源码阅读(四)网络

    28 GroupSock(NetAddress)——live555源码阅读(四)网络 28 GroupSock(NetAddress)——live555源码阅读(四)网络 简介 1) NetAddre ...

  3. 31 GroupSock(AddressString)——live555源码阅读(四)网络

    31 GroupSock(AddressString)——live555源码阅读(四)网络 31 GroupSock(AddressString)——live555源码阅读(四)网络 简介 Addre ...

  4. 29 GroupSock(NetAddressList)——live555源码阅读(四)网络

    29 GroupSock(NetAddressList)——live555源码阅读(四)网络 29 GroupSock(NetAddressList)——live555源码阅读(四)网络 简介 Net ...

  5. 27 GroupSock概述(一)——live555源码阅读(四)网络

    27 GroupSock概述(一)——live555源码阅读(四)网络 27 GroupSock概述(一)——live555源码阅读(四)网络 简介 1.网络通用数据类型定义 2.Tunnel隧道封装 ...

  6. 40 网络相关函数(八)——live555源码阅读(四)网络

    40 网络相关函数(八)——live555源码阅读(四)网络 40 网络相关函数(八)——live555源码阅读(四)网络 简介 15)writeSocket向套接口写数据 TTL的概念 函数send ...

  7. 38 网络相关函数(六)——live555源码阅读(四)网络

    38 网络相关函数(六)——live555源码阅读(四)网络 38 网络相关函数(六)——live555源码阅读(四)网络 简介 12)makeSocketNonBlocking和makeSocket ...

  8. 37 网络相关函数(五)——live555源码阅读(四)网络

    37 网络相关函数(五)——live555源码阅读(四)网络 37 网络相关函数(五)——live555源码阅读(四)网络 简介 10)MAKE_SOCKADDR_IN构建sockaddr_in结构体 ...

  9. 39 网络相关函数(七)——live555源码阅读(四)网络

    39 网络相关函数(七)——live555源码阅读(四)网络 39 网络相关函数(七)——live555源码阅读(四)网络 简介 14)readSocket从套接口读取数据 recv/recvfrom ...

随机推荐

  1. JavaWeb学习笔记——javabean

  2. crond不执行原因分析

    自己写了个脚本,让crond来周期性执行脚本进行备份,但是在crontab -e里面加入了执行脚本之后,发现没有执行,后来分析了一下,crond不执行的原因主要有以下几个方面: 1.crond服务没启 ...

  3. IIS 8.5 伪静态去掉index.php thinkphp 3.2.2

    因为测试都是在win下开发的 win8.1企业版 II8.5 首先安装  Thinkphp 3.2.2 URL Rewrite Module 2.0 http://www.iis.net/downlo ...

  4. Python开发【第十七篇】:MySQL(一)

    一.概述 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access.MS SQL Serve ...

  5. ubuntu系统下使用锐捷上网的方法——特快

    1.点击右上方的有线连接: 2.点击编辑连接: 3.选择802.x的安全性分页: 4.勾选下面的单选框: 5.输入登陆账号(通常就是学号),密码(通常是身份证后六位),如果出现了一个“解锁密码环”的对 ...

  6. MFC中文件的查找、创建、打开、读写等

    http://blog.csdn.net/whatforever/article/details/6316416

  7. Sublime Text 3初阶

    本文主要介绍一些Sublime Text3的初级阶段,主要从最初的安装,到插件,还有主题这三个方面介绍,还会提到一些关于使用ST3的一些小小经验... 一:安装 首先进入sublime的官方地址去下载 ...

  8. 解析posix与perl标准的正则表达式区别 ---PHP

        正则表达式(Regular Expression,缩写为regexp,regex或regxp),又称正规表达式.正规表示式或常规表达式或正规化表示法或正规表示法,是指一个用 来描述或者匹配一系 ...

  9. Hadoop Fsimage 和 editlog

    在<Hadoop NameNode元数据相关文件目录解析>文章中提到NameNode的$dfs.namenode.name.dir/current/文件夹的几个文件: 1 current/ ...

  10. SQL pivot 基本用法 行列转换 数据透视

    SQL通过pivot进行行列转换 数据透视 可直接在sql server 运行 传统操作 和 pivot create table XKCl (name nchar(10) not null, 学科 ...