网络编程课程设计报告

上传人:汽*** 文档编号:501741715 上传时间:2023-01-14 格式:DOCX 页数:21 大小:388.03KB
返回 下载 相关 举报
网络编程课程设计报告_第1页
第1页 / 共21页
网络编程课程设计报告_第2页
第2页 / 共21页
网络编程课程设计报告_第3页
第3页 / 共21页
网络编程课程设计报告_第4页
第4页 / 共21页
网络编程课程设计报告_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《网络编程课程设计报告》由会员分享,可在线阅读,更多相关《网络编程课程设计报告(21页珍藏版)》请在金锄头文库上搜索。

1、Java网络编程报告姓名:蒋怡学号:1107300134题目:模拟火车售票退票系统# / 211 / 21、作业要求 :模拟火车售票退票系统实现一个服务器为多个客户服务,要求1、服务器用线程池,线程容量为 4,座位数为 60 个,即 01-60号座.2、客户通过网络发送请求可以退票可以买票,先来先服务,买票还 是退票由随机数决定, 退票必须是该用户买过的有效票, 先买的票先 退。若退票时该用户已没有买到的票,则改为买票。若服务器票已售 完,则需等待,先来先服务,哪个客户先来,服务器将先为哪个客户 服务。3、服务器每次接收一个客户请求需打印该客户的端口号、 IP 和该用 户是买票还是退票, 处理

2、该请求之前目前剩余的票所有座号, 处理之 后剩余的座号也要打印出来, 并延迟一个随机处理时间, 以模拟对每 个客户处理的时间不同。将处理结果发给客户。4、客户收到结果后打印到屏幕。5、注意资源共享的问题, 适当时可用同步代码, 不允许用同步方法。 注意线程之间的协作。演示时开放 4-5 个用户,并演示一次退票无效的情况(即要退的票在 服务器中还没有卖出去,要求 2 是正常情况)二、主要设计思路:1、该程序包括以下几个类:1) 、EchoClient.java2) ) EchoServer.java3) 、Node.java定义了线性表的一个节点的结构,并对节点进行初始化4) 、LList.ja

3、va接口类,包含以下几个方法:boolean isEmpty();int len gth();T get( int i);void insert( int i,T x);void insert1(T x);T remove( int i);void append(T x);5) 、SingleLinkList.java实现接口 LList 。6) 、Customer.java定义了 choise ,cus_tickets/判断线性表是否为空/返回线性表长度/返回第i(i0) 个元素/插入x作为第i个元素/按顺序插入一个数到链表中/删除第i个元素并返回被删对象/在线性表最后插入x元素两个属性和c

4、hoice ()方法,其中choise是一个随机产生的0或1,用来决定客户买票或退票。cus_list是一个线性表,用来存储客户所买到的所有票。7) 、Tickets.java定义了 number和list两个属性,其中number用来表示服务器售 出的票号,list是一个线性表,用来存储剩余火车票。包含了售票票方法sell()和退票方法return_ticket() 。2、思路及流程图1 )、首先客户端通过调用 Customer类的choice()方法,由choice()方法来决定客户是买票还是退票。若choise=1,则客户买票,若choise=0,则客户退票。流程图如下:2) 、若客户买

5、票,则通过输出流将买票信息发送给服务器端。若客 户退票,则通过“ customer. cus_list .isEmpty() ”这个语句判断 客户是否有票可退,若客户有票可退,则通过输出流将退票信息及所 退票号发送给服务器端;若客户无票可退,则改为买票,通过输出流 将信息发送给服务器端。流程图如下:3) 、服务器端通过输入流接收客户端的信息,接收信息后,随机产 生一个时间,线程休眠,模拟网络延迟。然后判断客户是买票还是退 票,若是买票,则调用Tickets 类中的sell()方法进行售票处理; 若是退票,则调用Tickets 类中的return_ticket() 方法进行退票 处理。流程图如下

6、:是tickets.sell()4)、若客户是买票的,则通过“list .isEmpty() ”判断是否有票可 售,若有票可售,则进行售票处理(即将list 线性表中的第一个节 点删除,表示此票已售出),处理后将信息反馈给客户;客户收到服 务器端的信息后,将反馈信息打印输出,同时将所买到的票添加到 cus_list 线性表的最后。若无票可售,则线程等待,将线程加入等待队列,当线程被唤醒后, 进行售票处理,处理后将信息反馈给客户。客户收到服务器端的信息 后,输出反馈的信息,同时,将所买到的票添加到cus_list 线性表的最后。否一T线程等待是将线程加入等待队列售票处理打印输出信息客户收到服务

7、器端反馈信息线程被唤醒后进行售票处理cus_list.appe nd()将反馈信息发送到客户端5)、若客户是退票的,首先判断客户所退的票是否是已售出的票, 若不是,则非法退票,退票失败,将反馈信息发送给客户端;若是, 则进行退票处理(将所要退的票按大小添加到线性表list中),退票处理后,将反馈信息发送给客户端,然后该线程将已经退了的票从cus_list 中删除(即cus_list.remove() )。判断是否有线程在等待队列中,若有,贝用队列中的第一个线程唤醒,进行售票处理,然后将反馈信息发送给客户端。退票客户端收到服务 器端的反馈信息该票是否已售岀退票处理退票是否成功非法退票,退票失败等

8、待队列是否空打印输岀退票成功信息输岀退票失败信息将所退的票售给第 一个等待的线程cusist.remove()*X将反馈信息发送到客户端3、关键代码1) 、EchoClient.javafor(i=1;i=500;i+) System. out .printin(”客户第+i+次请求);/msg=customer.choice();/choice产生随机数来确定客户是买票还是退票if(msg.equals(buy)pw.println(msg); /将客户买票的信息传给服务器/输岀服务器传给客户的买到票的信息/将客户买到的票放入链表的最后+n);/输出客户所拥有的所有票,cus_list :用

9、若客户所拥有的票不是空的,就退票System. out .println(br.readLine(); customer. cus_list .append(br.readLine();System. out .println(customer. cus_list 个链表存储客户所拥有的所有票else if(msg.equals(refund)if(!customer. cus_list .isEmpty() / pw.println(msg); / /将客户退票的信息传给服务器pw.println(cus_number=customer.cus_list .get(1); /获取客户最先买到

10、的那张票,将其传给服务器msg=br.readLine();/接收服务器的反馈信息if(!msg.equals( 非法退票!退票失败!)System. out .println(msg);customer. cus_list .remove(1);/将客户所退了的票从客户所拥有的票中移除System. out .println(customer. cus_list +n); /输出客户所拥有的所有票elseSystem. out .println(msg);else /否则,转为买票System. out .println(客户没有票可退,转为买票);pw.println(buy);/将买票信

11、息传给服务器System. out .println(br.readLine();/输出服务器传给客户的买到票的信息customer. cus_list .append(br.readLine();/将客户买到的票放入链表的最后System. out .println(customer. cus_list +n);/ 输出客户所拥有的所有票,cus_list:用一个链表存储客户所拥有的所有票2) 、EchoServer.javapublic class EchoServer private int port=8001;private ServerSocket serverSocket;priv

12、ate ExecutorService executorService;线程池private final int POOL_SIZE=4;/单个CPU时线程池中工作线程的数目List socketList=new ArrayList();/ 排队序列public EchoServer() throws IOException serverSocket = new ServerSocket(port); serverSocket.setReceiveBufferSize(50);/创建线程池executorService= Executors.newFixedThreadPool( POOL_S

13、IZE);System.out.println(” 服务器启动);public void service() while (true) Socket socket=null;try socket = serverSocket.accept();executorService.execute(new Handler(socket,socketList);catch (IOException e) e.printStackTrace();public static void main(String args)throws IOException new EchoServer().service()

14、;class Handler implements Runnableprivate Socket socket;private Tickets ticket=new Tickets();List socketList=new ArrayList();/ 排队序列public Handler(Socket socket, List socketList) this.socket=socket;this.socketList=socketList;private PrintWriter getWriter(Socket socket)throws IOExceptionOutputStream socketOut = socket.getOutputStream();return new PrintWriter(socketOut,true);private BufferedReader getReader(Socket socket)throws IOExceptionInputstream socketIn = socket.getlnputStream();return new BufferedReader( new InputStreamReader(socketIn);publ

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号