Socket 编程基础航班显示系统客户端.docx
- 文档编号:28613090
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:18
- 大小:60.64KB
Socket 编程基础航班显示系统客户端.docx
《Socket 编程基础航班显示系统客户端.docx》由会员分享,可在线阅读,更多相关《Socket 编程基础航班显示系统客户端.docx(18页珍藏版)》请在冰豆网上搜索。
Socket编程基础航班显示系统客户端
实验三Socket编程基础——航班显示系统客户端的设计与实现
一.实验目的
1、理解基于TCP的网络连接、套接字的基本概念
2、熟悉并熟练掌握Java中Socket类的使用
3、熟练掌握基于TCP的网络客户端的数据读写操作和客户端软件设计
二.实验环境
1、准备SUN的JDK6安装文件
2、Java程序开发软件一套——MyEclipse
三.实验实际完成内容及结果分析(请先说明你在小组中所承担的任务)
importjava.awt.EventQueue;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjavax.swing.border.EmptyBorder;
importjavax.swing.table.DefaultTableModel;
importjavax.swing.JTable;
importjavax.swing.JButton;
importjavax.swing.JScrollPane;
importjava.awt.event.ActionListener;
importjava.awt.event.ActionEvent;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
import.Socket;
import.UnknownHostException;
importjava.io.FileReader;
importjava.text.ParseException;
importjava.text.SimpleDateFormat;
importjava.util.Calendar;
importjava.util.Date;
importjava.util.Enumeration;
importjava.util.LinkedList;
importjava.util.Hashtable;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
importjava.awt.BorderLayout;
importjava.awt.GridBagLayout;
importjava.awt.GridBagConstraints;
importjava.awt.Insets;
publicclassFlyFrame1extendsJFrame{
privateJPanelcontentPane;
privateJTableflyTable;
privatestaticLinkedList
privatestaticLinkedList
privatestaticHashtable
privatestaticHashtable
privatestaticbooleanstopflog=false;//读取结束标志
/**
*Launchtheapplication.
*/
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
FlyFrame1frame=newFlyFrame1();
frame.setVisible(true);
}catch(Exceptione){
e.printStackTrace();
}
}
});
}
/**
*Createtheframe.
*
*@throwsIOException
*/
publicFlyFrame1()throwsIOException{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100,100,800,400);
contentPane=newJPanel();
contentPane.setBorder(newEmptyBorder(5,5,5,5));
setContentPane(contentPane);
//创建城市代码映射表
BufferedReadercityReader=newBufferedReader(newFileReader(
"AirportCode.txt"));
StringcityString=null;
while((cityString=cityReader.readLine())!
=null){
String[]aircodeArray=cityString.split("");
//citycode.put(aircodeArray[0],aircodeArray[2]);
citycode.put(aircodeArray[0],aircodeArray[1]);
}
cityReader.close();
contentPane.setLayout(newBorderLayout(0,0));
//创建滚动条
JScrollPaneflyTableScrollPane=newJScrollPane();
contentPane.add(flyTableScrollPane,BorderLayout.CENTER);
//创建表
finalDefaultTableModelflyTableModel=newDefaultTableModel(
newString[]{"航班号","前往","办票时间","预计起飞时间","登机口"},0);
flyTable=newJTable(flyTableModel);
flyTableScrollPane.setViewportView(flyTable);
JPanelbuttonPanel=newJPanel();
contentPane.add(buttonPanel,BorderLayout.SOUTH);
GridBagLayoutgbl_buttonPanel=newGridBagLayout();
gbl_buttonPanel.columnWidths=newint[]{772,0};
gbl_buttonPanel.rowHeights=newint[]{27,0};
gbl_buttonPanel.columnWeights=newdouble[]{0.0,Double.MIN_VALUE};
gbl_buttonPanel.rowWeights=newdouble[]{0.0,Double.MIN_VALUE};
buttonPanel.setLayout(gbl_buttonPanel);
//创建连接按钮
JButtonconnectButton=newJButton("\u8FDE\u63A5");
GridBagConstraintsgbc_connectButton=newGridBagConstraints();
gbc_connectButton.insets=newInsets(3,0,0,0);
gbc_connectButton.ipadx=50;
gbc_connectButton.fill=GridBagConstraints.VERTICAL;
gbc_connectButton.gridx=0;
gbc_connectButton.gridy=0;
buttonPanel.add(connectButton,gbc_connectButton);
//连接按钮动作
connectButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
//完成耗时的动作时必须开新线程,否则会导致更新出错
//读入线程
newThread(){
@Override
publicvoidrun(){
//TODO自动生成的方法存根
try{
//创建socket
Socketsocket=newSocket("10.5.25.193",9999);
//读入数据
try{
BufferedReaderflyReader=newBufferedReader(
newInputStreamReader(socket
.getInputStream()));
StringprocessString=null;
while((processString=flyReader.readLine())!
="nodata!
"){
if(processString
.matches(".*(schd_(upd|prep|none|del)).*flid=\\d{8}.*mvin=D.*|.*flop_bdop.*")){
//共享资源processList同步块
synchronized(processList){
processList.addLast(processString);
processList.notify();
}//endsynchronized
}//endif
}//endwhile
stopflog=true;
flyReader.close();//关闭流
}catch(IOExceptione){
//TODO自动生成的catch块
e.printStackTrace();
}finally{
try{
if(socket!
=null)
socket.close();
}catch(IOExceptione){
//TODO自动生成的catch块
e.printStackTrace();
}
}
}catch(UnknownHostExceptione){
//TODO自动生成的catch块
e.printStackTrace();
}catch(IOExceptione){
//TODO自动生成的catch块
e.printStackTrace();
}
};//endrun
}.start();//endthread
//处理线程
newThread(){
publicvoidrun(){
while(true){
try{
//处理结束
if(stopflog&&processList.isEmpty()){
break;
}
StringprocessString=null;
//共享资源processList同步块
synchronized(processList){
while(processList.isEmpty()){//如果处理数据列表中没有数据,则进入休眠状态
processList.wait();
}
processString=processList.removeFirst();//取出处理数据列表的第一项
}
//记录航班ID
MatchermatcherFild=Ppile(
"(flid=\\d+),")/*匹配并捕获flid*/
.matcher(processString);
matcherFild.find();
//设置对应flid的数据是否存在标记,默认值为-1
Integerindex=-1;
//更新数据
if(tableindex.get(matcherFild.group
(1))!
=null){
//获取索引
index=tableindex.get(matcherFild.group
(1));
//删除对应航班信息
if(processString.matches(".*schd_del.*")){
//共享资源processList同步块
synchronized(processList){
processList.remove(0);
}
flyTableModel.removeRow(index);
tableindex.remove(matcherFild.group
(1));
//更新tableindex的值
Enumeration
while(indexEnumeration.hasMoreElements()){
StringenumKeyString=indexEnumeration.nextElement();
IntegerkeyInteger=tableindex.get(enumKeyString);
if(keyInteger>index){
tableindex.put(enumKeyString,keyInteger-1);
}
}
//提示
Datenow=newDate();
SimpleDateFormatdateFormat=newSimpleDateFormat(
"HH:
mm:
ss");
System.out.println(dateFormat
.format(now)+"——删除一条数据");
}//endif
//更新数据
else{
//获取航班号,匹配alcd和flno并捕获所对应的数据
MatchermatcherAlcdFlno=Pattern
.compile(
"alcd=(\\w+),flno=(\\w+),")
.matcher(processString);
if(matcherAlcdFlno.find()){
flyTableModel.setValueAt(
matcherAlcdFlno.group
(1)
+matcherAlcdFlno
.group
(2),
index,0);
}//endif
//获取目的地
Matchermatcherapcd=Ppile(
"apcd=(\\w+)").matcher(/*匹配apcd并捕获对应的数据*/
processString);
if(matcherapcd.find()){
StringapcdString="";
matcherapcd.find(matcherapcd.end());
apcdString=apcdString
+citycode.get(matcherapcd
.group
(1));
while(matcherapcd.find(matcherapcd
.end())){
apcdString=apcdString
+""
+citycode
.get(matcherapcd
.group
(1));
}
flyTableModel.setValueAt(
apcdString,index,1);
}//endif
//获取办票时间&起飞时间
MatchermatcherFlyTime=Pattern
.compile(/*匹配sodt并捕获其最后4位数字HHMM*/
"sodt=\\w+(\\d{4}),").matcher(
processString);
if(matcherFlyTime.find()){//匹配成功,处理数据
//计算办票时间
SimpleDateFormatgettimeFormat=newSimpleDateFormat(
"HHMM");
SimpleDateFormatputtimeFormat=newSimpleDateFormat(
"HH:
MM");
//获取起飞时间
DateflytimeDate=gettimeFormat
.parse(matcherFlyTime
.group
(1));
flyTableModel.setValueAt(
puttimeFormat
.format(flytimeDate),
index,3);
//计算办票时间
CalendarchecktimeCalendar=Calendar
.getInstance();
checktimeCalendar
.setTime(flytimeDate);
checktimeCalendar.add(
Calendar.HOUR,-1);
StringcheckString=puttimeFormat
.format(checktimeCalendar
.getTime())
+"-";
checktimeCalendar.add(
Calendar.MINUTE,30);
checkString=checkString
+puttimeFormat
.format(checktimeCalendar
.getTime());
flyTableModel.setValueAt(
checkString,index,2);
}//endif
//获取登机口信息
Matchermat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Socket 编程基础航班显示系统客户端 编程 基础 航班 显示 系统 客户端