开放性实验实验报告
- 格式:doc
- 大小:338.50 KB
- 文档页数:20
实验一人工天穹采光实验一、实验目的通过对带不同形式天窗的房间进行采光测试并对比分析,以求得到更合理的开窗形式;同时利用数码技术,以便更直观观察模型内部采光效果。
二、实验仪器JT-1型人工天穹(北京世纪建通科技发展有限公司制造),该设备采用环氧聚酯(玻璃钢)做罩面,钢材做底座,结构简单,有不易变形,耐老化,尤其是拆移搬迁不破坏结构等特点。
造价也较低。
其缺点是不能将内径做得更大,灯具全安装在底部,需要更大功率,调试亮度分布较困难,而且由于光源在内部,处理不好易对穹内光环境造成直接干扰。
照度计二台,房间模型(尺度约为人工天穹半径的1/5)三、实验原理该实验理论根据是立体角投影定律E=∫LαdΩcosθ室内工作面上一点P的照度E,是由透过窗口“看到”的天空表面与观测点P所形成立体角在被照面上的投影与发光天空亮度的乘积所决定。
四、实验内容利用人工天穹和建筑采光的模型,测试分析和预测其天然采光设计的效果。
五、实验步骤(1)打开电源,点亮天穹半球照明用的反射灯,检查每盏反射灯的点亮情况,使其达到稳定状态后开始进行测试。
(白炽灯5秒,荧光灯15秒以上)(2)对天穹亮度分布进行调试,使其符合CIE全阴天(自然天空有晴天、半云天、全阴天等不同情况,其中半云天及晴天亮度分布是非均匀的,情况较复杂,在采光设计中,我们通常考虑一个特殊情况作为研究对象,即天空全部为云所遮盖的天气,国际采光协会命名这样的天空为全阴天空。
这时无直射日光,只有天空扩散光。
在该标准天空中,CIE规定天顶亮度与不同仰角处亮度有一个关于仰角正弦值的函数关系)特征。
亮度计安装在带刻度盘的三角架上,放置在和工作台等高的中心位置;按15度的仰角,依次从零开始,逐点测试天穹内部的各点亮度;通过调试灯具的功率,使其达到CIE全阴天的亮度分布要求,一次调好后不用重复调试。
然后将照度计探头放置在平台上,测试照度值,记录;将室外照度计放在模型顶上,以测定天空照度。
室外照度计依次放在模型内各测点上测量读值。
机械工程实验教学中心开放性实验报告实验项目:学生姓名学号专业班级指导教师完成时间目录1 实验说明 (2)1.1 实验目的 (2)1.1.1 [单击此处添加三级标题] (2)1.1.2 [单击此处添加三级标题] (2)1.1.3 [单击此处添加三级标题] (2)1.2 实验要求 (2)1.2.1 [单击此处添加三级标题] (2)1.2.2 [单击此处添加三级标题] (2)1.3 实验设备 (2)1.3.1 实验场所 (2)1.3.2 实验仪器 (2)2 [单击此处添加一级标题] (3)2.1 [单击此处添加二级标题] (3)2.1.1 [单击此处添加三级标题] (3)2.1.2 [单击此处添加三级标题] (3)2.2 [单击此处添加二级标题] (3)2.2.1 [单击此处添加三级标题] (3)2.2.2 [单击此处添加三级标题] (3)2.3 [单击此处添加二级标题] (3)2.3.1 [单击此处添加三级标题] (3)2.3.2 [单击此处添加三级标题] (3)2.4 [单击此处添加二级标题] (3)2.4.1 [单击此处添加三级标题] (3)2.4.2 [单击此处添加三级标题] (3)3 总结 (4)以下是说明文字,正式成文后请删除。
请勿在目录页“[单击此处添加×级标题]”处输入内容,作者只需在正文中相应标题处添加内容,回到目录处点鼠标右键,选择“更新域”→“更新整个目录”,就可将标题内容添加到目录项。
(图目录和表目录采用相同的操作方法)1 实验说明1.1 实验目的1.1.1 [单击此处添加三级标题][单击此处添加论文正文]1.1.2[单击此处添加三级标题][单击此处添加论文正文]1.1.3[单击此处添加三级标题][单击此处添加论文正文]1.2 实验要求1.2.1 [单击此处添加三级标题][单击此处添加论文正文]1.2.2 [单击此处添加三级标题][单击此处添加论文正文]1.3 实验设备1.3.1 实验场所[单击此处添加论文正文]1.3.2 实验仪器[单击此处添加论文正文]2 [单击此处添加一级标题]2.1 [单击此处添加二级标题]2.1.1 [单击此处添加三级标题][单击此处添加论文正文]2.1.2 [单击此处添加三级标题][单击此处添加论文正文]2.2 [单击此处添加二级标题]2.2.1 [单击此处添加三级标题][单击此处添加论文正文]2.2.2 [单击此处添加三级标题][单击此处添加论文正文]2.3 [单击此处添加二级标题]2.3.1 [单击此处添加三级标题][单击此处添加论文正文]2.3.2 [单击此处添加三级标题][单击此处添加论文正文]2.4 [单击此处添加二级标题]2.4.1 [单击此处添加三级标题][单击此处添加论文正文]2.4.2 [单击此处添加三级标题][单击此处添加论文正文]3 总结[单击此处添加论文正文]。
中国海洋大学开放实验结题报告项目中文名称:自动投食设备的自主制作设计中使用到的器件:PIC单片机(18F452)、液晶屏、电机、固定辅助器件等指导老师:张凯临小组成员:陈志勇、刘凯悦项目实现构思背景分析: 1.配合SRDP需要、节省经费2.锻炼动手实践能力3.提高单片机编程能力应用市场分析:适用于一些养鱼爱好者,需要出门旅游,以及一些爱养鱼但又很忙的人特色描述:鱼食防潮、定期投食、LCD时钟显示、项目实现方案总体设计方案:前期:系统学习PIC板的编程、软件的使用等,完成定时器程序准备好投食装备的材料中期:着手准备投食设备的制作后期:总结改进实际应用项目实现过程:一准备硬件硬件部分包括:电路板、液晶屏、电机、储食槽1、焊接电路板的焊接图一为原始电路板焊接完成图样2、设计所需器件(齿轮、导槽、固定板)绘图软件Solid Works画好3D图,导出到刀具切割软件,机床切割加工出所需器件;图二为装配体设计图稿图三为机床加工过程图四为设计成型的小齿轮二软件的实现(编程操作)1、LED灯定时亮灭定时实现:思路1一个按键控制模式,调节喂食间隔、喂食时间;一个按键控制模式,调节喂食间隔、喂食时间;另一个按钮控制需要调节的量的加减。
优点:用户可以完全实现自定义控制缺点:给编程带来了极大的困难,如何区分,加减后如何通过将设定的时间通过定时器控制实现定时控制现实状况:投食系统不需要给用户太多选择,给用户提到三四种模式选择即可思路2:用两个数组预置好需要投食间隔及投食时间一个按钮控制数组下标的加减来提取数组预先设置好的值另一个按钮确定,并将数组的值设定定时器定时的时间。
缺点:需预先设置好数组,只能通过更改程序数组才能改变预留模式,不能给用户带来足够的自由优点:大大简化了编程,能满足大多数用户的需求所以采用思路22.液晶屏以及按钮实现可视化图二为所设液晶屏最初开启界面图三为液晶屏设置界面3.定量:电机时间转动一定时间电机转动一圈由于重力作用下落的鱼食数目大致相同,60r/min,控制转的时间即可图四为小电机模块三自动投食设备模型制作及测试最后,我们对单片机、液晶屏、小电机等模块进行拼接操作,先将所编程序烧录到单片机中,电源为单片机供电,成功地实现了通过设置、确定按钮对投食设备的定时投食进行了控制。
开放性实验报告实验名称:机构创新组合与设计开放性实验院系:机械与材料工程学院专业:机械与材料工程学院班级学号:学生姓名:指导老师:起止时间:2014.12.2-2014.12.192014年12 月16日机构组合创新设一、实验目的与要求1.目的1)加深学生对机构组成理论的认识,熟悉杆组概念,为机构创新设计奠定良好的基础。
2)利用若干不同的杆组,拼接各种不同的平面机构,以培养学生机构运动创新设计意识及综合设计的能力。
3)训练学生的工程实践动手能力。
2.要求1)根据所拆杆组,按不同顺序排列杆组,分析可能组合的机构运动方案有哪些,并能用运动简图表示出来。
2)通过实验,了解位移、速度、加速度的测定方法;转速及回转不匀率的测定方法3)通过比较理论运动曲线与实测运动曲线的差异,并分析起原因,增加对运动速度特别是加速度的感性认识。
二、实验仪器与设备一组机构系统创新组合模型(包括4个架)基本配置所含组件如下:1.接头接头分单接头和组合接头两种:单接头有5种形式,组合接头有4种形式。
(1)单接头J1螺纹分左旋和右旋两种。
方头的侧面上,为12×12方通孔。
(2)单接头J2螺纹分左旋和右旋两种。
方头的侧面上,为φ12圆通孔。
(3)单接头J3螺纹全部为右旋,方头的侧面上为12×12方通孔,且螺杆端有一段φ12的过渡杆,根据长度的不同分为6种,即:从短至长适应一到六层的分层需要,便于不同层次联接选择。
(4)单接头J4为L形状,两垂直面上,一面为方通孔,另一面为圆通孔。
(5)单接头J5有一方孔,其两垂直右旋螺杆上有一端带有φ12圆柱,根据圆柱长度不同分为6种,即:从短至长适应一到六层的分层需要,便于不同层次联接选择。
(6)组合接头J1/J7有两种,J1与J7之间可相对旋转。
两种组合接头组合形状一样,但其中一种为一右旋和一左旋螺纹,另一种为两左旋螺纹。
(7)组合接头J6/J4,J6与J4之间可相对旋转。
第1篇一、实验目的1. 了解光合作用的基本原理和过程。
2. 探究光照强度、二氧化碳浓度、温度等因素对植物光合作用的影响。
3. 培养学生独立思考、动手操作和实验分析的能力。
二、实验原理光合作用是植物在光照条件下,利用光能将二氧化碳和水转化为有机物和氧气的过程。
光合作用主要受光照强度、二氧化碳浓度、温度等因素的影响。
三、实验材料1. 实验植物:小麦、大豆、水稻等。
2. 实验装置:光照培养箱、气体分析仪、温度计、秒表等。
3. 实验试剂:二氧化碳、蒸馏水、无水乙醇、NaOH溶液等。
四、实验步骤1. 准备实验材料:选取生长状况良好、大小一致的小麦、大豆、水稻等植物作为实验材料。
2. 设置实验装置:将植物放置在光照培养箱中,调节光照强度、二氧化碳浓度和温度。
3. 实验分组:(1)对照组:设置正常光照、正常二氧化碳浓度和正常温度。
(2)实验组1:降低光照强度,保持正常二氧化碳浓度和正常温度。
(3)实验组2:保持正常光照强度,增加二氧化碳浓度,保持正常温度。
(4)实验组3:保持正常光照强度和二氧化碳浓度,降低温度。
4. 进行实验:观察并记录不同条件下植物的生长状况和光合作用产物。
5. 数据分析:对实验数据进行整理、分析和比较。
五、实验结果与分析1. 光照强度对植物光合作用的影响实验结果显示,降低光照强度后,植物的生长速度明显减缓,光合作用产物减少。
说明光照强度对植物光合作用有显著影响,在一定范围内,光照强度越高,光合作用越强。
2. 二氧化碳浓度对植物光合作用的影响实验结果显示,增加二氧化碳浓度后,植物的生长速度明显加快,光合作用产物增加。
说明二氧化碳浓度对植物光合作用有显著影响,在一定范围内,二氧化碳浓度越高,光合作用越强。
3. 温度对植物光合作用的影响实验结果显示,降低温度后,植物的生长速度明显减缓,光合作用产物减少。
说明温度对植物光合作用有显著影响,在一定范围内,温度越高,光合作用越强。
六、实验结论1. 光照强度、二氧化碳浓度和温度是影响植物光合作用的三个主要因素。
XXX学院(学校)大学生实验室开放项目实验报告项目名称: BIM技术在PC项目中的能耗研究学生姓名:学院班级:指导教师:实验时间:XX二○一三年四月三十日《BIM技术在PC项目中的能耗研究》课题研究实验报告《BIM技术在PC项目中的能耗研究》课题研究是山东协和学院实验室立项审核批准,由XX老师组织开展的实践应用型科研课题,由10名同学共同参与研究学习,经过研究与实践,现已取得部分的成效,现将研究情况报告如下:一、课题研究的背景目前建筑高能耗发展,新型PC项目快速发展,在信息化与工业化发展的建筑行业中,需要绿色低碳建筑的支撑。
BIM是建筑信息管理的集成平台,BIM的加入,使建筑行业高效率,低污染的施工,协同工作控制施工的质量、进度、造价及安全。
本实验通过软件建模,模拟施工,对比分析传统施工与PC施工的进度、造价与能耗分析。
1.在我国,建筑业发展快,巨大的建设量同时也给施工企业带来了大量因沟通和实施环节信息流失而造成的损失,BIM信息整合重新定义了设计流程,很大程度上能够改善这一状况。
2.建筑业需要可持续发展,PC建筑由此孕育而生,PC建筑具有安全性好、质量高、建造速度快、环境污染少的优点,BIM的加入能够进行建筑生命周期管理以及节能分析。
3.国家资源规划管理信息化的需求。
在BIM技术成为建筑业大势所趋的今天,目前国内绝大部分设计院建筑设计采用的仍是全2D工程制图,为此,我们应加大BIM在建筑上的应用,实现建筑的信息化分析。
二、实验条件与方法(1)实验材料:01-施工图PC图纸(2)实验仪器设备:实验室机房及自备电脑(3)实验方案:①XX老师对研究方向进行确定,指导学生对项目学习过程中的困惑。
②课题组主要成员积极完成课题组安排的各项工作。
XX、XX等同学进行Revit软件学习,分别建立PC构件与正常构件,后期导入Ecotect进行能耗分析对比。
XX、XX等同学进行GGJ、GCL建模。
XX、XX等同学进行GBQ软件的学习,并对PC构件与正常构件分别组价,得出造价比对。
开放性实验报告学院:经济管理学院班级:110931学号:11093117姓名:张超实验一:线缆的制作方法一、实验目的:如何制作网线二、实验设备:网线钳,双绞线,RJ-45水晶头,测线仪三、实验原理:1、双绞线布线标准:T568A芯线序列:略T568B芯线序列:橙白,橙,绿白,蓝,蓝白,绿,棕白,棕RJ45水晶头:单片向下2、双绞线类型:直通线(用于不同设备之间,常用),交叉线(不同设备,不常用)四、实验步骤:1、剪线:实际长度稍长(长则凌乱,短则不足)2、剥线:半圆形剥线刀口要点:轻握,慢旋,拔下胶皮。
长度:1.5-2.5cm3、排序:将线拆开,理顺捋直,然后按规矩排列(T568B的顺序)4、剪齐:将线捋直,压平,挤紧理顺,然后剪齐,留1-1.5cm(左手捏紧千万不能放开)。
5、插入:用左手捏水晶头的8根芯线,右手捏水晶头有弹片的一对准水晶头开口,插入,再往里使劲推,使每一根芯线接触到水晶头底部。
6、压制:使水晶头从无牙一侧插入压线口,用力挤紧。
7、测线:把水晶头插入侧线头,打开开关(1~8灯同时依次亮)。
实验二:小型局域网组网:一、实验目的:小型局域网的组建,安装,调式与维护。
二、实验任务:组建一个八人的小型局域网。
三、组网方案:1、局域网规划:需求分析:实验网络资源共享。
2、局域网设计:(1)网络设备选择:服务器1台、工作站7台、网卡9个、网线9根、交换机1台(2)网络拓扑结构:星形软件选择:XPTCP/IP协议四、硬件安装与配置1、网线制作(实验一)2、网卡3、工作站4、交换机五、软件安装与配置1、网卡驱动安装:系统自动安装、手动安装、软件安装2、网络协议安装:(TCP/IP协议)3、TCP/IP协议属性配置:服务器:内网:IP:192.168.0.1子网掩码:255.255.255.0默认网关:...DNS:10.1.89.99工作站:外网:自动获取客户端:IP:子网掩码:255.255.255.0网关:192.168.0.1DNS:4、网络配置检测(cmd):ipcondfig:命令:查看当前PC的TCP/IP协议ping命令:查看网络连通性(ping+空格+IP地址)tracert:检查到达目标的路径并记录结果(tracert+空格+域名)三、实验结果:经过四节课的学习,我学会的网线线头的制作过程和使用方法,也知道了局域网的创建的使用,知道了局域网功能的强大。
开放性实验报告开放性实验报告引言实验是科学研究中重要的一环,通过实验可以验证假设、探索未知、解决问题。
本实验旨在探索某种现象的成因,并通过开放性实验的方式进行观察和分析,以期得出结论并进一步推广应用。
实验目的本实验的目的是研究某种现象的成因,并通过开放性实验的方式进行观察和分析,以确定影响该现象的因素,并提出解决方案。
实验方法1. 实验准备:准备实验所需的材料和设备,并确保实验环境符合要求。
2. 实验步骤:按照预定的步骤进行实验,记录实验过程中的观察和数据。
3. 数据分析:对实验数据进行分析,寻找规律和关联。
4. 结果验证:通过对实验结果的验证,确定所得结论的可靠性。
实验结果在进行实验的过程中,我们观察到了某种现象的发生,并记录下了相应的数据。
通过对这些数据的分析,我们发现了一些规律和关联。
进一步的实验验证表明,我们的结论是可靠的。
讨论与分析在讨论与分析部分,我们将对实验结果进行进一步的讨论和分析,探讨可能的原因和解释。
同时,我们还将与已有的研究成果进行比较,以验证我们的结论的准确性和可靠性。
结论通过本次实验,我们得出了某种现象的成因,并提出了相应的解决方案。
这一结论对于进一步研究和应用具有重要意义,并为相关领域的发展提供了一定的参考。
实验的局限性和改进方向在实验中,我们也发现了一些局限性,这些局限性可能会对实验结果的准确性和可靠性产生一定的影响。
为了进一步提高实验的可靠性,我们可以采取一些改进措施,例如增加样本数量、优化实验设计等。
结语通过本次开放性实验,我们不仅得到了有关某种现象的重要信息,还深入了解了实验的重要性和科学研究的方法。
希望本次实验的结果能够对相关领域的发展和应用产生积极的影响,并为未来的研究提供更多的思路和方向。
参考文献[1] 作者1,标题1,期刊名1,年份1。
[2] 作者2,标题2,期刊名2,年份2。
[3] 作者3,标题3,期刊名3,年份3。
九年级化学开放性实验总结新课程理念倡导开放教学,而开放教学的核心是问题的开放性。
就初中化学教学而言,开放性问题,从内容上看具有新颖性,从形式上看具有生动性,从解决的路径看具有发散性,从问题的功能看具有创造性。
开放性问题的解决,往往需要学生积极的探索才能完成,这对于吸引学生主体的积极参与,开发学生的潜能,提高科学素质是十分有益的。
在初中化学教学中,积极开展开放性问题教学,对于提高学生的化学探究能力,创新思维能力都有极其重要的作用。
下面就本人的教学实践,谈谈在初中化学的实际教学中进行开放性问题教学应抓住的几个关键环节。
一、从教学实际出发,注意问题引入的适时性要认识到开放性问题并不能简单地代替常规性的知识训练和基本实验技能训练,恰恰相反,扎扎实实地搞好这些训练是解决开放性问题的基础。
开放性问题不仅要追求问题本身的新颖性和生动性,以便更好地激发学生的兴趣,而且要注意问题引入的适时性。
开放性问题的引入要从教学实际出发,把握好最佳时机。
一是在学习内容含有开放性的因素时,适时创设开放性问题。
若教学内容本身就隐含着开放的因素,就要充分挖掘学习材料中的这些因素,在问题情境的创设或开展合作讨论活动中适时引入开放性问题。
如学习“摩擦力”的内容时,教师在适当的时候可抛出如下开放性的问题:用哪些方法可证明氢氧化钠的溶液与稀盐酸已经发生反应?描述有关现象,写出有关化学方程式。
二是学生有了相应的知识积累欲求进一步拓展和深化时,引入开放性问题。
随着学生完成基础知识的学习,知识丰富了,思路拓宽了,思维能力提高了,学习方法也多了,学生就有一种自觉地要求拓展和深化知识的欲望,这时教师不妨引入相应的开放性问题,让学生自己去探讨。
二、以学生发展为本,关注问题解决的过程性新课程理念的核心是以学生发展为本,一切教学行为和教学手段的设计都要围绕学生的发展这个中心。
教学中不仅要关注结果,更要关注过程,开放性问题的解决更要强调过程性。
这里的过程性有两个层次:从参与的面上来讲,教师要关注全体学生的参与,避免使课堂活动成为少数人表演的舞台。
开放性试验大纲一试验题目:水泥混凝土系列配合比设计二试验的目的和意义三指导教师四试验参加人员及时间五实验内容1 实验依据2 实验步骤3 实验数据分析4 实验结论六实验错误分析与处理七试验体会及建议水泥混凝土系列配合比设计试验开放性试验大纲一实验目的通过对实际工程渝湘高速连接道秀山二标段大桥工程不同部位、不同强度等级要求的混凝土配合比设计,掌握配合比的设计步骤,熟悉原材料的性能,了解不同强度等级混凝土的物理,力学性能等。
二指导老师: 刘大超黄维蓉李力三实验参加人员及时间:人员:雷杰刘涛常炜董自前唐文虎邢海娟曹青霞胡一周肖存伟何文星李菁若刘祥代红伟刘鑫时间:2009年9月至2010年2月四实验仪器试模电子称振动机铁锹压力试验机量筒烘箱砂石标准筛五实验内容1 实验依据(1) GB 175—2007 《通用硅酸盐水泥标准》(2) GB∕T 1346—2000 《水泥标准稠度用水量、凝结时间、安定性检验方法》(3) GB/T 17681—1999 《水泥胶砂强度检测方法》(4) JTG E42—2005 《公路工程集料实验规程》(5) JGJ 55—2000 《普通混凝土配合比设计规程》2 原料分析(1)水泥:P.O42.5 , P.O32.5其物理化学指标如下表1:表1 水泥物理化学指标(2)水:自来水,所含物质对混凝土、钢筋混凝土和预应力混凝土不应产生以下有害作用:①影响混凝土的和易性及凝结;②有损于混凝土强度发展;③降低混凝土的耐久性,加快钢筋腐蚀及导致预应力钢筋脆断;④污染混凝土表面。
且水的pH值、不溶物、可溶物、氯化物、硫酸盐、硫化物的含量应符合表2的规定。
表2 自来水指标(3)砂:机制砂和细砂砂的筛分实验结果及合成如表3表3 砂的合成级配合成级配曲线图如图1:图1 砂的合成级配曲线细砂的表观密度为2.65g/cm3,含泥量为2.5%。
机制砂表观密度为2.63g/cm3,含泥量为2.1%,压碎值为12.5%。
基于JAVA的语音、图像信号处理系统实验报告学院:信息与电子工程学院班级:软件工程092学号:109029041姓名:钱枫指导教师:宋起文二O一一年十二月一.课程设计原理开发语言:Java(J2SE)开发平台:MyEclipse开发背景:J ava中提供的套接字功能为通信系统的实现提供了基础,通过IO的流传输具体实现了数据的实时传输,javax.sound.sampled 类提供了读取、写入声卡数据的具体方法。
1.套接字:客户端Socket:Socket(InetAddress host,int port):声明一个连接到某地址的主机内的相应端口的套接字。
工作完毕后,使用流对象的close()方法关闭网络通信的输入输出流,用Socket对象的close()方法关闭套接字;服务端的ServerSocket:ServerSocket(int port,int backlog):声明一个有相应端口被申请的服务器套接字,backlog表示在序列里等待连接的客户端数目,若等待数超过backlog值,则客户端的连接被拒绝,若未声明具体值,则默认随机选择一空闲端口。
工作完毕后,使用流对象的close()方法关闭网络通信的输入输出流,用ServerSocket对象的close()方法关闭套接字。
2.输入、输出流:New BufferedWriter(new OutputStreamWriter(socket2.getOutputStream())):向套接字的输出数据流写入格式化的数据;new BufferedReader(new InputStreamReader(socket2.getInputStream())):从套接字的输入数据流读取格式化的数据。
2.javax.sound.sampled类接口和方法:new AudioFormat(8000.0f, 8, 2, true, true):设置音频数据格式;TargetDataLine接口:从音频捕获设备获取其数据的数据行;SourceDataLine接口:将音频字节写入设备源数据行;targetDataLine.read(byte[] b, int off, int len):从数据行的输入缓冲区读取音频数据;sourceDataLine.write(byte[] b, int off, int len):通过此源数据行将音频数据写入混频器。
二.源代码:客户端部分:package Communication;import java.awt.*;import java.awt.event.*;import .*;import javax.swing.*;import java.io.*;import javax.sound.sampled.*;class Volume extends Thread {private Client tcpClient;public boolean isConn;public Volume(Client _tcpClient) {tcpClient = _tcpClient;}public void run() {StringBuffer sb;while (isConn) {sb = new StringBuffer();int r = (int) (Math.random() * 51);for (int i = 0; i < r; i++) {sb.append('.');}tcpClient.V oiceSpectrum.setText(sb.toString());try {sleep(200);} catch (InterruptedException e) {e.printStackTrace();}}tcpClient.V oiceSpectrum.setText(null);}}class ClientThread extends Thread {private Client tcpClient;private Volume volume;private Socket socket;private OutputStream output;private InputStream input;private TargetDataLine targetLine;private SourceDataLine sourceLine;private boolean isConn;public ClientThread(Client _tcpClient) {tcpClient = _tcpClient;}public void run() {try {socket = new Socket("localhost", 9999);} catch (Exception e) {JOptionPane.showMessageDialog(tcpClient.frame,"语音服务未开启", "错误", JOptionPane.ERROR_MESSAGE);tcpClient.tglbtnConn.doClick();return;}try {output = socket.getOutputStream();input = socket.getInputStream();} catch (IOException e) {JOptionPane.showMessageDialog(tcpClient.frame, "音频数据流传输失败", "错误", JOptionPane.ERROR_MESSAGE);tcpClient.tglbtnConn.doClick();return;}AudioFormat audioFormat = new AudioFormat(8000.0f, 8, 2, true, true); Line_in = new (TargetDataLine.class, audioFormat); Line_out = new (SourceDataLine.class, audioFormat); try {targetLine = (TargetDataLine)AudioSystem.getLine(Line_in);targetLine.open(audioFormat,targetLine.getBufferSize());sourceLine = (SourceDataLine)AudioSystem.getLine(Line_out);sourceLine.open(audioFormat,sourceLine.getBufferSize());} catch (LineUnavailableException e) {JOptionPane.showMessageDialog(tcpClient.frame, "音频设备发生错误", "错误", JOptionPane.ERROR_MESSAGE);sounds_close();tcpClient.tglbtnConn.doClick();return;}volume = new V olume(tcpClient);volume.isConn = true;volume.start();byte[] soundsBytes = new byte[1024];//单个数据包容量为1024字节isConn = true;targetLine.start();sourceLine.start();int readLength;while (true) {readLength = targetLine.read(soundsBytes, 0, soundsBytes.length);try {output.write(soundsBytes, 0, readLength);output.flush();readLength = input.read(soundsBytes);} catch (Exception e) {sourceLine.stop();targetLine.stop();sounds_close();if (isConn) {JOptionPane.showMessageDialog(tcpClient.frame, "语音数据通道断开","错误", JOptionPane.ERROR_MESSAGE);tcpClient.tglbtnConn.doClick();return;}break;}sourceLine.write(soundsBytes, 0, readLength);}}public void sounds_close() {try {sourceLine.close();} catch (NullPointerException e) {}try {targetLine.close();} catch (NullPointerException e) {}}public void stream_close() {try {input.close();} catch (NullPointerException e) {} catch (IOException e) {e.printStackTrace();}try {output.close();} catch (NullPointerException e) {} catch (IOException e) {e.printStackTrace();}}public void socket_close() {try {socket.close();} catch (NullPointerException e) {} catch (IOException e) {e.printStackTrace();}}public void close() {try {volume.isConn = false;} catch (NullPointerException e) {}isConn = false;stream_close();socket_close();}}public class Client extends Frame implements ActionListener { private Socket socket2;private BufferedWriter writer;private BufferedReader reader;private ClientThread clientThread;private JLabel lblConnStatus = new JLabel("关闭");private TextField sendBox=new TextField();private TextArea msgView=new TextArea();public JToggleButton tglbtnConn = new JToggleButton("开启连接");public JFrame frame = new JFrame();public JLabel V oiceSpectrum = new JLabel();public static void main(String[] args) {Client client=new Client();client.connect();}public Client() {frame.setTitle("网络通信(客户端)");frame.setMinimumSize(new Dimension(550, 400));frame.setBounds(100, 100, 550, 400);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().setLayout(null);msgView.setEditable(false);JToolBar toolBar = new JToolBar();toolBar.setBounds(381, 343, 153, 19);toolBar.setFloatable(false);frame.getContentPane().add(toolBar);JLabel lblConn = new JLabel("语音连接状态:");toolBar.add(lblConn);toolBar.add(lblConnStatus);JPanel panel = new JPanel();panel.setBounds(0, 0, 351, 274);frame.getContentPane().add(panel);panel.setLayout(new BorderLayout(0, 0));JScrollPane scrollPane = new JScrollPane();panel.add(scrollPane);scrollPane.setViewportView(msgView);JButton button = new JButton("发送");button.setBounds(143, 288, 66, 25);button.addActionListener(this);frame.getContentPane().add(button);JPanel panel_1 = new JPanel();panel_1.setBounds(0, 327, 351, 35);frame.getContentPane().add(panel_1);panel_1.setLayout(new BorderLayout(0, 0));JScrollPane scrollPane_1 = new JScrollPane();panel_1.add(scrollPane_1);scrollPane_1.setViewportView(sendBox);sendBox.setColumns(10);VoiceSpectrum.setBounds(416, 108, 58, 17);frame.getContentPane().add(V oiceSpectrum);tglbtnConn.setBounds(405, 288, 90, 25);frame.getContentPane().add(tglbtnConn);tglbtnConn.addActionListener(this);frame.setVisible(true);}private void connect(){try{socket2=new Socket("localhost",7777);msgView.append("文字通道完成连接"+socket2+"\n\n");writer=new BufferedWriter(new OutputStreamWriter(socket2.getOutputStream()));reader=new BufferedReader(new InputStreamReader(socket2.getInputStream()));getMessage();}catch(Exception e){JOptionPane.showMessageDialog(null, "文字通道未建立","错误", JOptionPane.ERROR_MESSAGE);}}void getMessage(){try{while(true){msgView.append("服务器:"+reader.readLine()+"\n\n");}}catch(Exception ee){JOptionPane.showMessageDialog(null, "未能正常显示发送内容","错误", JOptionPane.ERROR_MESSAGE);}finally{try{if(reader!=null)reader.close();if(socket2!=null)socket2.close();reader=null;socket2=null;msgView.append("文字连接已断开"+'\n');}catch(Exception e){JOptionPane.showMessageDialog(null, "关闭文字输入流或套接字失败","错误", JOptionPane.ERROR_MESSAGE);}}}public void actionPerformed(ActionEvent e) {if(e.getActionCommand() == "发送"){try{msgView.append("客户端:"+sendBox.getText()+"\n\n");writer.write(sendBox.getText());writer.newLine();writer.flush();sendBox.setText("");}catch(Exception ee){JOptionPane.showMessageDialog(null, "内容未正常显示或未写入输入流","错误", JOptionPane.ERROR_MESSAGE);}}if (e.getActionCommand() == "开启连接") {lblConnStatus.setText("已连接");tglbtnConn.setSelected(true);tglbtnConn.setText("关闭连接");clientThread = new ClientThread(this);clientThread.start();}if (e.getActionCommand() == "关闭连接"){lblConnStatus.setText("已断开");tglbtnConn.setSelected(false);tglbtnConn.setText("开启连接");clientThread.close();}}}服务器部分:package Communication;import java.awt.*;import java.awt.event.*;import .*;import javax.swing.*;import java.io.*;import javax.sound.sampled.*;class ServerVolume extends Thread {private Server tcpServer;public boolean isConn;public ServerVolume(Server _tcpServer) {tcpServer = _tcpServer;}public void run() {StringBuffer sb;while (isConn) {sb = new StringBuffer();int r = (int) (Math.random() * 51);for (int i = 0; i < r; i++) {sb.append('.');}tcpServer.SVoiceSpectrum.setText(sb.toString());try {sleep(200);} catch (InterruptedException e) {e.printStackTrace();}}tcpServer.SVoiceSpectrum.setText(null);}}class ServerThread extends Thread {private Server tcpServer;private ServerV olume serverV olume;private ServerSocket ss;private Socket socket;private OutputStream output;private InputStream input;private TargetDataLine targetLine;private SourceDataLine sourceLine;private boolean isConn;public ServerThread(Server _tcpServer) {tcpServer = _tcpServer;}public void run() {try {ss = new ServerSocket(9999);} catch (IOException e) {JOptionPane.showMessageDialog(tcpServer.frame, "端口已被占用","错误", JOptionPane.ERROR_MESSAGE);tcpServer.tglbtnService.doClick();return;}try {socket = ss.accept();} catch (Exception e) {JOptionPane.showMessageDialog(tcpServer.frame,"语音连接未成功", "错误", JOptionPane.ERROR_MESSAGE);tcpServer.tglbtnService.doClick();return;}try {output = socket.getOutputStream();input = socket.getInputStream();} catch (IOException e) {JOptionPane.showMessageDialog(tcpServer.frame, "音频数据流传输失败", "错误", JOptionPane.ERROR_MESSAGE);tcpServer.tglbtnService.doClick();return;}AudioFormat audioFormat = new AudioFormat(8000.0f, 8, 2, true, true); Line_in = new (TargetDataLine.class, audioFormat); Line_out = new (SourceDataLine.class, audioFormat); try {targetLine = (TargetDataLine)AudioSystem.getLine(Line_in);targetLine.open(audioFormat,targetLine.getBufferSize());sourceLine = (SourceDataLine)AudioSystem.getLine(Line_out);sourceLine.open(audioFormat,sourceLine.getBufferSize());} catch (LineUnavailableException e) {JOptionPane.showMessageDialog(tcpServer.frame, "音频设备发生错误", "错误", JOptionPane.ERROR_MESSAGE);sounds_close();tcpServer.tglbtnService.doClick();return;}serverVolume = new ServerV olume(tcpServer);serverVolume.isConn = true;serverVolume.start();byte[] soundsBytes = new byte[1024];// 尽量取适中大小isConn = true;targetLine.start();sourceLine.start();int readLength;while (true) {readLength = targetLine.read(soundsBytes, 0, soundsBytes.length);try {output.write(soundsBytes, 0, readLength);output.flush();readLength = input.read(soundsBytes);} catch (Exception e) {sourceLine.stop();targetLine.stop();sounds_close();if (isConn) {JOptionPane.showMessageDialog(tcpServer.frame, "语音数据通道断开","错误", JOptionPane.ERROR_MESSAGE);tcpServer.tglbtnService.doClick();}break;}sourceLine.write(soundsBytes, 0, readLength);}}public void sounds_close() {try {sourceLine.close();} catch (NullPointerException e) {}try {targetLine.close();} catch (NullPointerException e) {}}public void stream_close() {try {input.close();} catch (NullPointerException e) {} catch (IOException e) {e.printStackTrace();}try {output.close();} catch (NullPointerException e) {} catch (IOException e) {e.printStackTrace();}}public void socket_close() {try {socket.close();} catch (NullPointerException e) {} catch (IOException e) {e.printStackTrace();}}public void ss_close() {try {ss.close();} catch (NullPointerException e) {} catch (IOException e) {e.printStackTrace();}}public void close() {try {serverV olume.isConn = false;} catch (NullPointerException e) {}isConn = false;stream_close();socket_close();ss_close();}}public class Server implements ActionListener {private static final long serialVersionUID=1L;private ServerSocket ss2;private Socket socket2;private BufferedWriter writer;private BufferedReader reader;private TextArea msgView = new TextArea();private TextField sendBox=new TextField();private ServerThread serverThread;private JLabel lblServerStatus = new JLabel("关闭");public JToggleButton tglbtnService = new JToggleButton("开启服务");public JFrame frame = new JFrame();public JLabel SV oiceSpectrum = new JLabel();public static void main(String[] args) {Server server = new Server();server.connect();}public Server() {frame.setTitle("网络通信(服务器)");frame.setBounds(700, 100, 550, 400);frame.setMinimumSize(new Dimension(550, 400));frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().setLayout(null);msgView.setEditable(false);JToolBar toolBar = new JToolBar();toolBar.setBounds(381, 343, 153, 19);toolBar.setFloatable(false);frame.getContentPane().add(toolBar);JLabel lblConn = new JLabel("语音服务状态:");toolBar.add(lblConn);toolBar.add(lblServerStatus);JPanel panel = new JPanel();panel.setBounds(0, 0, 351, 274);frame.getContentPane().add(panel);panel.setLayout(new BorderLayout(0, 0));JScrollPane scrollPane = new JScrollPane();panel.add(scrollPane);scrollPane.setViewportView(msgView);JButton button = new JButton("发送");button.setBounds(143, 288, 66, 25);button.addActionListener(this);frame.getContentPane().add(button);JPanel panel_1 = new JPanel();panel_1.setBounds(0, 327, 351, 35);frame.getContentPane().add(panel_1);panel_1.setLayout(new BorderLayout(0, 0));JScrollPane scrollPane_1 = new JScrollPane();panel_1.add(scrollPane_1);scrollPane_1.setViewportView(sendBox);sendBox.setColumns(10);SV oiceSpectrum.setBounds(416, 108, 58, 17);frame.getContentPane().add(SV oiceSpectrum);tglbtnService.setBounds(405, 288, 90, 25);frame.getContentPane().add(tglbtnService);tglbtnService.addActionListener(this);frame.setVisible(true);}private void connect(){try{ss2=new ServerSocket(7777);socket2=ss2.accept();msgView.append("与客户端完成文字连接"+socket2+"\n\n");writer=new BufferedWriter(new OutputStreamWriter(socket2.getOutputStream()));reader=new BufferedReader(new InputStreamReader(socket2.getInputStream()));getMessage();}catch(Exception e){JOptionPane.showMessageDialog(null, "文字通道未建立","错误", JOptionPane.ERROR_MESSAGE);}}void getMessage(){try{while(true){msgView.append("客户端:"+reader.readLine()+"\n\n");}}catch(Exception ee){JOptionPane.showMessageDialog(null, "未能正常显示发送内容","错误", JOptionPane.ERROR_MESSAGE);}finally{try{if(reader!=null)reader.close();if(socket2!=null)socket2.close();reader=null;socket2=null;msgView.append("文字连接已断开"+'\n');}catch(Exception e){JOptionPane.showMessageDialog(null, "关闭文字输入流或套接字失败","错误", JOptionPane.ERROR_MESSAGE);}}}public void actionPerformed(ActionEvent e) {if(e.getActionCommand() == "发送"){try{msgView.append("服务器:"+sendBox.getText()+"\n\n");writer.write(sendBox.getText());writer.newLine();writer.flush();sendBox.setText("");}catch(Exception ee){JOptionPane.showMessageDialog(null, "内容未正常显示或未写入输入流","错误", JOptionPane.ERROR_MESSAGE);}}if (e.getActionCommand() == ("开启服务")){tglbtnService.setSelected(true);lblServerStatus.setText("服务已开启");tglbtnService.setText("关闭服务");serverThread = new ServerThread(this);serverThread.start();}if (e.getActionCommand() == ("关闭服务")){tglbtnService.setSelected(false);lblServerStatus.setText("服务已关闭");tglbtnService.setText("开启服务");serverThread.close();}}}三.成果截图:1.文字通信:2.语音通信:3.当客户端关闭语音连接时:4.当服务器关闭语音服务时:。