中国民航大学《网络编程技术》实验报告实验五UDP通信——基于UDP的航班显示系统的设计与实现——行李提取姓名______学号_____小组编号小组其他成员的学号实验日期2015年12月1日实验报告日期2015年12月27日成绩一、实验目的1.理解基于UDP的解网络程序的通信原理和同学过程。2.熟悉并熟练掌握Java中DatagramSocket、DatagramPacket类的使用。3.熟练掌握基于UDP的网络应用程序的设计及创建。二、实验环境1.准备SUN的JDK6安装文件。2.Java程序开发软件一套——MyEclipse6.0。三、实验原理主要知识点:DatagramSocket、DatagramPacket类的使用。中国民航大学《网络编程技术》实验报告四、实验要求1.四人一组。2.按照下面所给实验步骤完成各项内容,将实际的操作过程记录在实验报告中,报告中的配置参数应给出实际的值,必要的执行结果需要提供成功运行或配置的界面。3.完成思考题,并给出答案。4.实验结束给出实验总结和体会。5.实验报告要求:(1)格式与内容应符合实验报告标准;(2)对程序设计的思路以及具体设计步骤应详细说明,并附上相应的程序流程图;(3)对程序设计中发生的问题以及解决的办法要加以叙述与总结;(4)附上所设计的程序清单,并对关键部分进行说明。五、实验内容及步骤【背景描述】为了提高航班显示系统各程序间的通信效率,减轻网络负荷,故机场拟采用UDP协议实现航班显示服务器与各显示终端的通信。【实验内容和步骤】本次实验主要是要综合运用,在完成实验三、实验四航班动态显示系统的服务器和客户端程序的基础上,设计并开中国民航大学《网络编程技术》实验报告发基于UDP通信机制的航班显示系统(包括服务器和客户端)的应用软件,具体内容如下:1.给出基于UDP的航显系统的设计方案(包括设计思路,类结构和对象模型);2.创建应用服务的器的监听端口(UDP端口:9999),从航班信息文本文件(fds_data(lab4).txt)获取航班的动态信息,并向已知航显终端提供动态的航班数据,发送信息数据部分的格式如下(同课内实验四):dttm=20140619002341flop_gtdt[flid=25266600,ffid=CA-709-D-19JUN141345-I,gtdt=[GTDT[gtno=1,gate=03,gast=null,gaet=null]]](同实验三,客户端收的数据)。3.要求采用多线程技术或非阻塞技术处理各个客户端的连接请求;4.给出程序运行结果,并分析;5.客户端向服务发送请求航班数据的数据包(向服务器进行注册),并接收服务器端发过来的航班数据。六、实验实际完成内容及结果分析1.题目:行李提取2.要求:(1)显示条件满足下列条件的航班才能在行李提取屏上显示:中国民航大学《网络编程技术》实验报告这里有两种可选的判断方式:A.按到达时间判断1)必须是进港航班。2)航班的状态为“到达”。3)分配到当前行李转盘。4)到达后5分钟开始显示,到达后60分钟结束显示(以实际到达时间判断比如,航班在9:00到达,则显示的时间段为9:05-10:00。5)“取消”的航班不显示。B.按行李转盘开关时间判断1)必须是进港航班。2)分配到当前行李转盘3)转盘开放前15分钟开始显示,转盘关闭后5分钟结束显示(有实际时间按实际时间判断,没有实际时间按预计时间判断。使用这种判断模式必须确保能从集成系统获取到转盘开关时间)。4)“取消”的航班不显示。(2)显示规则1)按实际到达时间排序。2)中、英文同屏。3)超过3个航班则翻页显示,翻页时间10秒。(3)显示字段中国民航大学《网络编程技术》实验报告航班号:包括主航班号和共享航班号。来自:始发站、经停站。3.实验代码服务器:importjava.io.*;importjava.net.*;publicclassEchoServer{privateintport=9999;privateDatagramSocketsocket;publicEchoServer()throwsIOException{socket=newDatagramSocket(port);//与本地的一个固定端口绑定System.out.println(服务器启动);}publicvoidservice(){while(true){try{DatagramPacketpacket=newDatagramPacket(newbyte[512],512);socket.receive(packet);//接收来自任意一个EchoClient的数据报System.out.println(服务器地址+packet.getAddress()+:+服务器端口+packet.getPort());BufferedReaderbr=newBufferedReader(newFileReader(fds_data(lab4).txt));Stringmsg=null;while((msg=br.readLine())!=null){System.out.println(msg);if(msg.equals(dataout!))break;}packet.setData(msg.getBytes());socket.send(packet);//给EchoClient回复一个数据报}catch(IOExceptione){e.printStackTrace();}}}publicstaticvoidmain(Stringargs[])throwsIOException{newEchoServer().service();}}中国民航大学《网络编程技术》实验报告客户端:importjava.awt.EventQueue;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.BufferedReader;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStreamReader;importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetAddress;importjava.net.Socket;importjava.net.UnknownHostException;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTable;importjavax.swing.border.EmptyBorder;importjavax.swing.table.DefaultTableModel;publicclassEchoClientextendsJFrame{privateJPanelcontentPane;privateJTabletable;privateDatagramSocketsocket;/***Launchtheapplication.*/publicstaticvoidmain(String[]args){EventQueue.invokeLater(newRunnable(){publicvoidrun(){try{EchoClientframe=newEchoClient();frame.setVisible(true);}catch(Exceptione){e.printStackTrace();}}});}/***Createtheframe.*/publicEchoClient(){中国民航大学《网络编程技术》实验报告setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100,100,757,484);contentPane=newJPanel();contentPane.setBorder(newEmptyBorder(5,5,5,5));setContentPane(contentPane);contentPane.setLayout(null);JScrollPanescrollPane=newJScrollPane();scrollPane.setBounds(36,20,669,353);contentPane.add(scrollPane);finalDefaultTableModeltableModel=newDefaultTableModel(newString[]{航空公司,航班号,始发站,经停站},0);//这是TableModel的一个实现,它使用一个Vector来存储单元格的值对象table=newJTable(tableModel);scrollPane.setViewportView(table);JButtonbtnStart=newJButton(开始);btnStart.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){newThread(){//新建线程publicvoidrun(){//tableModel.addRow(newString[]{CA12345,LP22,5});try{socket=newDatagramSocket();InetAddressremoteIP=InetAddress.getByName(127.0.0.1);BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));Stringline1=null;Stringa1=null;Stringa2=null;Stringa4=null;Stringa5=null;//定义5个字符串分别用来存储5列信息,后输出到table中while((line1=br.readLine())!=nodata!){byte[]outputData=line1.getBytes();DatagramPacketoutputPacket=newDatagramPacket(outputData,outputData.length,remoteIP,9999);socket.send(outputPacket);//给EchoServer发送数据报DatagramPacketinputPacket=new中国民航大学《网络编程技术》实验报告DatagramPacket(newbyte[512],512);socket.receive(inputPacket);Stringstr1=newString();//用于存放读取后的整行数据Stringstr2=newString();//用于存放读取后的整行数据Stringline=newString(inputPacket.getData());//System.out.println(line);if(line.contains(schd_upd)){Strings1=line;s1=s1.replace('[','');//用''替换符串中出现的'['。s1=s1.replace(']','');String[]result=s1.split(,);//根据','将一个字符串分割为子字符串,然后返回到result[]数组中。intn=0,m=0,p=0;for(intx=0;xresult.length;x++){if(result[x].contains(=))//当