基于net的局域网im聊天工具内容摘要:
分片,并不只是发送端主机连接第一个网络才这样做。 本科生毕业设计 19 2.、 UDP校验 UDP检验和覆盖 UDP首部和 UDP数据。 回想 IP首部的检验和,它只覆盖 IP的首部 — 并不覆盖 IP数据报中的任何数据。 UDP和 TCP在首部中都有覆盖它们首部和数据的检验。 UDP的检验和是可选的,而 TCP的检验和是必需的。 尽管 UDP检验和的基本计算方法与我们在 3 . 2节中描述的 IP首部检验和计算方法相类似( 16 bit字的二进制反码和),但是它们之间存在不同的地方。 首先, UDP数据报的长度可以为奇数字节,但是检验和算法是把若干个 16 bit字相加。 解决方法是必要时在最后增加填充字节 0,这只是为了检验和的计算(也就是说,可能增加的填充字节不被传送)。 其次, UDP数据报和 TCP段都包含一个 12字节长的伪首部,它是为了计算检验而设置的。 伪首部包含 I P首部一些字段。 其目的是让 UDP两次检查数据是否已经正确到达目的地(例如, IP没有接受地址不是本主机的数据报,以及 IP没有把应传给另一高 层的数据报传给 UDP)。 3.、 最大 UDP数据报长度 理论上, IP数据报的最大长度是 65535字节,这是由 IP首部 16比特总长度字段所限制的。 去除 20字节的 IP首部和 8个字节的 UDP首部, UDP数据报中用户数据的最长长度为 65507字节。 但是,大多数实现所提供的长度比这个最大值小。 我们将遇到两个限制因素。 第一,应用程序可能会受到其程序接口的限制。 Socket API提供了一个可供应用程序调用的函数,以设置接收和发送缓存的长度。 对于 UDP Socket,这个长度与应用程序可以读写的最大 UDP数据报的长度直 接相关。 现在的大部分系统都默认提供了可读写大于 8192字节的 UDP数据报(使用这个默认值是因为 8192是 NFS读写用户数据数的默认值)。 第二个限制来自于 TCP/ IP的内核实现。 可能存在一些实现特性(或差错),使 I P数据报长度小于 65535字节。 4.、 数据报截断 由于 IP能够发送或接收特定长度的数据报并不意味着接收应用程序可以读取该长度的数据。 因此, UDP编程接口允许应用程序指定每次返回的最大字节数。 如果接收到的数据报长度大于应用程序所能处理的长度,那么结果取决于编程接口和实现。 典型的 Berkeley版 Socket API对数据报进行截断,并丢弃任何多余的数据。 应用程序何时能够知道,则与版本有关( Reno及其后的版本可以通知应用程序数据报被截断)。 SVR4下的 Socket API(包括 Solaris ) 并不截断数据报。 超出部分数据在后面的读取中返回。 它也不通知应用程序从单个 UDP数据报中多次进行读取操作。 TLI API不丢弃数据。 相反,它返回一个标志表明可以获得更多的数据,而应用程序后面的读操作将返回数据报的其余部分。 TCP为应用程序本科生毕业设计 20 提供连续的字节流,而没有任何信息边界。 TCP以应 用程序读操作时所要求的长度来传送数据,因此,在这个接口下,不会发生数据丢失。 5.、 客户 IP地址及端口号 来自客户的是 UDP数据报。 IP首部包含源端和目的端 IP地址, UDP首部包含了源端和目的端的 UDP端口号。 当一个应用程序接收到 UDP数据报时,操作系统必须告诉它是谁发送了这份消息,即源 I P地址和端口号。 这个特性允许一个交互 UDP服务器对多个客户进行处理。 给每个发送请求的客户发回应 6.、 目的 IP地址 一些应用程序需要知道数据报是发送给谁的,即目的 IP地址。 这要求操作系统从接收到的 UDP数据报中将目的 I P地址交给应用程序。 广播和组播 TCP 通信采用一对一的通信模式。 日常生活中的网络会议通知、广告、网络信息公告等功能,需要采用 UDP 实现一对多的群发功能。 通过 Inter 实现群发功能的形式有两种: ,比如各类通知、单位公告、集体活动日程安排等; Inter 网上不同的子网发送消息,比如集团向其所属的公司或用户子网发布信息公告等。 广播就是指同时向子网中的多台计算机发送消息,并且所有子网中的计算机都可以接收到发送方发来的消息。 每个广 播消息包含一个特殊的 IP地址,这个特殊地址的特点是子网内主机标示部分的二进制表示均为 1。 广播消息地址分为两种类型: 本地广播是指向子网中的所有计算机发送广播消息,其他网络不会受到本地广播的影响。 IP地址分为两部分,网络标示部分(指定向哪个子网发送)和主机标示部分(全为 1表示向该子网内的所有用户发送消息。 ),把主机标示部分二进制表示全部为 1的地址称为本地广播地址 全球广播的目的地是网络上的所有设备。 全球广播使用四个字节所有位全为1的 IP地址,即点分十进制的 ,这个特定的广播地址 表明数据报的目的地是网络上的所有设备。 但是由于路由器会自动过滤掉全球广播,所以使用这个地址没有实际意义。 广播的通信模式虽然能够实现一对多的通信需要,但是,由于广播是向子网中的所有计算机用户发送消息,没有目的性,不但增加了网络传输负担,而且资源消耗较高。 本科生毕业设计 21 组播也叫多路广播。 所谓组播是将消息从一台计算机发送到本网或全网内选择的计算机子集上,即发送到那些加入指定组播组的计算机上。 实际运用中,往往除了广播之外,为了满足一部分特定的用户需求,我们则需要用到组播这一技术,组播和广播的区别主要有以下两种: 播无法通过路由器 ,广播只是限于本网段内,遇到路由器则止。 同网段内其他在指定端口侦听的程序都能收到该包都需要一个数据 copy。 组播没有这个限制,只要加入组就能收到数据包。 ,没有目的性,会增加网络传输负担,而且资源消耗较高。 组播将消息发送到加入指定组播组的计算机中,组播组是开放的,每台计算机都可以通过程序随时加入到组播组中,也可以随时离开,因此减少了不必要的网络传输负担。 组播组:是分享一个组播地址的一组设备。 任何发送到组播地址的消息都会被发送到组内的所有成员 设备上。 组可以是永久的,也可以是临时的。 大多数组播组是临时的,仅在有成员的时候才存在。 组播地址:组播地址是范围在 D类 IP地址。 IP组播使用特殊的 IP地址范围来表示不同的组播组。 用户创建一个新的组播组时只需从地址范围内选出一个地址,然后为这个地址构造一个对象,就可以开始发送消息了。 使用组播时,应注意的是 TTL(Time To Live,生存周期 )值的设置。 TTL值是允许路由器转发的最大数目,当达到这个最大值时,数据包就会被丢弃。 如果使用默认值 (默认值 为 1),则只能在子网中发送。 可以通过 UdpClient对象的 Ttl属 性直接设置 TTL值,例如: 代码 31 该语句设置 TTL值为 50,即最多允许 50次路由器转发。 利用 UdpClient的 DropMulticastGroup方法,可以退出组播组。 参数中指出要退出的多路广播组的 IPAddress实例。 UdpClient从组中收回之后,将不能再接收发送到该组的数据报。 本系统中用到的语音编解码规范 音频的编解码,压缩转换 ,使用 G729 协议。 协议建 议使用 CSACELP的 8kb/s 话音编码算 法,其编译码原理如下。 UdpClient myUdpClient = new UdpClient()。 myUdpClient. TTL = 50。 本科生毕业设计 22 编码原理 模拟输入信号经话带滤波后以 8000Hz 取样率采样,获得的样值随后转换为16 比特线性 PCM 信号并输入到编码器。 编码器在 10ms 的话音帧上运行,它相应于采样速率每秒 8000 次的 80 个样本。 对每个 10ms 帧而言,分析话音信号以抽取码激励线性预测 (CELP)模式的参数。 在预处理单元中,输入信号须经过定标和高通滤波。 定标是指输入信号被 2 除,以降低定点运算中的溢出可能;高通滤波则滤掉不希望出现的低频分量。 经预处理的信号充当所有后续分析使用的输入信号。 LP 分析每 10ms 帧进行 一次,以计算 LP 滤波器系数,此后,为了量化与内插的目的,将该 LP 系数转换到线谱对 (LSP)域,接着把内插的量化的与非量化的滤波器转换回 LP 滤波系数,以构造每子帧的合成与加权滤波器。 每 10ms帧根据感知加权话音信号估计一次开环基音延迟,然后对各子帧重复以下运算: A. 滤波器的初始态通过 LPC 信息与激励间的误差滤波来更新; B. 通过 LPC 信息经由加权合成滤波器的滤波来计算目标信号 x(n); C. 计算加权合成滤波器的脉冲响应 h(n); D. 通过开环基音延迟值的搜寻,使用目标信号 x(n)和脉冲响应 h(n)来 完成闭环基音分析,以发现自适应码本的延迟与增益; E. 通过除去自适应码本影响,更新目标信号 x(n),并且所产生的新的目标信号 x(n)用于在固定码本中搜寻发现最佳激励; F. 自适应与固定码本产生的增益采用 7 比特矢量量化,通过极小化原始话音与重构话音间的均方加权误差完成增益码本的搜寻; G. 使用决定的激励信号对合成与加权滤波器的状态更新以计算下一子帧的目标信号。 这样,完成 CSACELP 的编码过程,编码出传输速率为 8kb/s 的话音信号比特流 (而普通的 PCM 话音为 64kb/s)。 译码原理 首 先,从接收到的比特流中抽取参数的指标,译码后获取相应于 10ms 话音帧的编码参数。 这些参数为 LSP 系数、两个分数基音延迟、两个固定码本矢量以及自适应码本增益与固定码本增益的两个集。 对每个子帧内插 LSP 系数并将其转换为 LP 滤波器系数。 然后,对于每个 5ms 子帧实施以下步骤:分别按其增益进行定标的自适应码本矢量相加与固定码本矢量,构造激励;通过 LP 合成滤波器滤波上述激励,重构话音;重构话音信号经后置处理后还原出普通的PCM(64kb/s)话音信号。 本科生毕业设计 23 第 4 章 语音及群聊功能具体设计 语音通话的实现 实现方法概要 A. 语音采集:采集的作用就是从你的麦克风中获取数据,我采用 DirectSound类来实现这个技术。 B. 语音编码:利用语音编码算法对采集到的话音进行压缩编码,进行编码的目的是为了减少网络带宽的压力。 C. 语音传输:将采集到的声音传输到网络上的其它主机,我采用 Socket UDP方式来实现。 D. 语音解码:如果所传输的语音进行过压缩编码,则必须对语音进行解码,否则无法得到原始语音数据。 :当对方通过网络传输到本机时,进行实时播放。 图 41 语音实时通信系统框图 本科生毕业设计 24 语音采集 与 音不同的是,录音我们需要建立一个 WAVE 文件来存储这些采集到的数据,而在语音聊天中,则不需要存储,当采集到一些数据后,就立刻发送出去,因此也不需要开辟很大的空间来存放 PCM 数据。 以下是采集的基本步骤: A. 设置 PCM 格式,设置相关的参数,如:采样频率、量化位数等。 B. 建立采集用的设备对象,建立采集用的缓冲区对象。 C. 设置缓冲区通知,设置通知被触发后的事件。 通知是用于当缓冲区的读指针达到某预设位置时触发通知事件,提醒我们可以对某部分的数据进行传送了。 D. 开始采集声音。 E. 当通知被触发后,建立一个新的线程来处理数据传送的事件。 (建立一个新的线程,就是为了防止采集过程被中断)。 以下为主要代码: 代码 41 /// 设置音频格式,如采样率等 /// returns设置完成后的格式 /returns private WaveFormat SetWaveFormat() { WaveFormat format = new WaveFormat()。 =。 //设置音频类型 = 11025。 //采样率(单位:赫兹)典型值: 1102 22050、 44100Hz = 16。 //采样位数 = 1。 //声道 = (short)( * ( / 8))。 //单位采样点的字节数 = *。 return format。 //按照以上采样规格,可知采样 1 秒钟的字节数为 22050*2=44100B 约为 43K } 本科生毕业设计 25 代码 42 /// 创建捕捉缓冲区对象 private void CreateCaptureBuffer() { //想要创建一个捕捉缓冲区必须要两个参数:缓冲区信息,缓冲设备。 WaveFormat mWavFormat = SetWaveFormat()。 CaptureBufferDescription bufferdescription = new CaptureBufferDescription()。基于net的局域网im聊天工具
相关推荐
般度过剩下的二分之一的时光,想要些特别的经历,想让生命更厚重些,想让青春更绚丽些,最终我选择了顶岗实习。 同时,顶刚实习也圆了我儿时的梦想,当一名光荣的人民教师。 怀揣着为四年大学生活画上最浓重一笔的愿望和儿时最初的梦想,来到了我 的目的地 —— 县镇中学。 短短的一个月却让我经历了不寻常的人生,体验到了所谓的酸甜苦辣。 的确实习生活是快乐并痛苦的,有晴天,有阴天,甚至偶尔暴风骤雨。
12层粉质黏土( fak=200kpa)、③ 2b23层粉砂( fak=170kpa)和④ 1b1 层粉质黏土( fak=250kpa) 各土层物理指标平均值表 层号 名 称 含水率 土重度 孔隙比 液限 塑限 塑性 指数 液性 指数 状态或 密实度 w γ e WL WP IP IL % kN/m3 — % % — — ① 1 杂填土 ① 2 素填土 ② 1b23 粉质黏土 可塑 ② 2b4
件箱中,用户可以直接查阅,如果邮件包含附件或图片就从数据库中读取附件或图片的信息,并在页面上显示出来。 如果没有相符合的,则该用户没有新邮件。 (流程图 7所示) Y数据库查询判断是否与登录用户相符放入收件箱N用 户登 录结 束 图 7 收信模块功能图 功能 系统已发邮件箱和收件箱中,对选中邮件执行“删除”,则更新邮件的标志位,并将选中邮件放进废件箱中,在废件箱中可以将邮件从数 据库(
单信 息,并根据订单及现有库存量计算所需零件数量,生成新的采购单。 在此流程中,系统可以生成销售统计报告; ( 2)采购管理流程:新的采购单生成后,采购管理员可以根据采购清单采购所需零件。 采购完成后,系统会根据采购情况重新计算库存。 系统会生成采购统计报告,以便管理者实时查看采购信息。 ( 3)库存管理流程:当库存零件足够时便可进行组装,组装完毕后经库存管理员确认便可出库发货。
列表以及分别对应的单价和总额,并且登录的顾客可以查看其当前定单的状态以及在本网上购物系统中所有历史定单信息。 5. 用户管理 本系统不支持匿名购买商品,顾客要购物的话必须注册相应的 ID,因此主要功能为支持用户注册,同时也支持用户修改 其基本信息,包括修改登录密码。 6. 用户控件 显示本网上购物系统的顶端图片以及一些友情链接和版权信息,使本系统更加美观、更加符合当前网站主流样式。
一条 订单与航班见的联系,因此,航空订票系统是一个涉及管理内容众多,数据关系复杂的系统。 本航空系统的开发主要分为程序软件的开发及对数据库的建立两部分。 对程序软件的前台开发,对用户的需求要有完整性,并且得让用户使用起来方便;对数据库的后台建立,要使得数据库具备一致性、完整性、安全性、独立性、易扩展性等功能。 国内外的发展概况 从迈入 21 世纪开始,在这个新的历史时期电子商务探索发展了十多年