JAVAWord文档格式.doc
《JAVAWord文档格式.doc》由会员分享,可在线阅读,更多相关《JAVAWord文档格式.doc(12页珍藏版)》请在冰豆网上搜索。
主要知识点:
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.按行李转盘开关时间判断
2)分配到当前行李转盘
3)转盘开放前15分钟开始显示,转盘关闭后5分钟结束显示(有实际时间按实际时间判断,没有实际时间按预计时间判断。
使用这种判断模式必须确保能从集成系统获取到转盘开关时间)。
4)“取消”的航班不显示。
(2)显示规则
1)按实际到达时间排序。
2)中、英文同屏。
3)超过3个航班则翻页显示,翻页时间10秒。
(3)显示字段
航班号:
包括主航班号和共享航班号。
来自:
始发站、经停站。
3.实验代码
服务器:
importjava.io.*;
import.*;
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;
import.DatagramPacket;
import.DatagramSocket;
import.InetAddress;
import.Socket;
import.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();