电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOC文档下载
分享到微信 分享到微博 分享到QQ空间

网络编程课程设计报告

  • 资源ID:474323549       资源大小:357.50KB        全文页数:21页
  • 资源格式: DOC        下载积分:20金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要20金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

网络编程课程设计报告

Java网络编程报告姓名: 蒋怡 学号: 34 题目: 模拟火车售票退票系统 一、作业要求:模拟火车售票退票系统实现一个服务器为多个客户服务,要求1、 服务器用线程池,线程容量为4,座位数为60个,即01-60号座.2、 客户通过网络发送请求可以退票可以买票,先来先服务,买票还是退票由随机数决定,退票必须是该用户买过的有效票,先买的票先退。若退票时该用户已没有买到的票,则改为买票。若服务器票已售完,则需等待,先来先服务,哪个客户先来,服务器将先为哪个客户服务。3、 服务器每次接收一个客户请求需打印该客户的端口号、IP和该用户是买票还是退票,处理该请求之前目前剩余的票所有座号,处理之后剩余的座号也要打印出来,并延迟一个随机处理时间,以模拟对每个客户处理的时间不同。将处理结果发给客户。4、 客户收到结果后打印到屏幕。5、 注意资源共享的问题,适当时可用同步代码,不允许用同步方法。注意线程之间的协作。演示时开放4-5个用户,并演示一次退票无效的情况(即要退的票在服务器中还没有卖出去,要求2是正常情况)二、 主要设计思路:1、该程序包括以下几个类:1)、EchoClient.java2)、EchoServer.java3)、Node.java 定义了线性表的一个节点的结构,并对节点进行初始化4)、LList.java 接口类,包含以下几个方法: boolean isEmpty(); / 判断线性表是否为空 int length(); / 返回线性表长度 T get(int i); / 返回第i(i>0)个元素 void insert(int i,T x); / 插入x作为第i个元素 void insert1(T x); /按顺序插入一个数到链表中 T remove(int i); / 删除第i个元素并返回被删对象 void append(T x); / 在线性表最后插入x元素5)、SingleLinkList.java 实现接口LList。6)、Customer.java 定义了choise,cus_tickets两个属性和choice()方法,其中 choise是一个随机产生的0或1,用来决定客户买票或退票。 cus_list是一个线性表,用来存储客户所买到的所有票。7)、Tickets.java定义了number和list两个属性,其中number用来表示服务器售出的票号,list是一个线性表,用来存储剩余火车票。包含了售票票方法sell()和退票方法return_ticket()。2、 思路及流程图 1)、首先客户端通过调用Customer类的choice()方法,由choice()方法来决定客户是买票还是退票。若choise=1,则客户买票,若choise=0,则客户退票。流程图如下:客户买票choice=(int)(Math.random()*2)choise=1客户退票票是否2) 、若客户买票,则通过输出流将买票信息发送给服务器端。若客户退票,则通过“customer.cus_list.isEmpty()”这个语句判断客户是否有票可退,若客户有票可退,则通过输出流将退票信息及所退票号发送给服务器端;若客户无票可退,则改为买票,通过输出流将信息发送给服务器端。流程图如下:否是客户退票客户拥有的票是否为空发送退票信息给服务器端发送买票信息给服务器端客户买票发送买票信息给服务器端3) 、服务器端通过输入流接收客户端的信息,接收信息后,随机产生一个时间,线程休眠,模拟网络延迟。然后判断客户是买票还是退票,若是买票,则调用Tickets类中的sell()方法进行售票处理;若是退票,则调用Tickets类中的return_ticket()方法进行退票处理。流程图如下:接收客户端的信息线程休眠一段时间客户是否买票tickets.sell()Tickets.return _ticket()否是4)、若客户是买票的,则通过“list.isEmpty()”判断是否有票可售,若有票可售,则进行售票处理(即将list线性表中的第一个节点删除,表示此票已售出),处理后将信息反馈给客户;客户收到服务器端的信息后,将反馈信息打印输出,同时将所买到的票添加到cus_list线性表的最后。若无票可售,则线程等待,将线程加入等待队列,当线程被唤醒后,进行售票处理,处理后将信息反馈给客户。客户收到服务器端的信息后,输出反馈的信息,同时,将所买到的票添加到cus_list线性表的最后。客户收到服务器端反馈信息打印输出信息cus_list.append()否是否有票可售售票处理是售票线程等待线程被唤醒后进行售票处理将线程加入等待队列将反馈信息发送到客户端5) 、若客户是退票的,首先判断客户所退的票是否是已售出的票,若不是,则非法退票,退票失败,将反馈信息发送给客户端;若是,则进行退票处理(将所要退的票按大小添加到线性表list中),退票处理后,将反馈信息发送给客户端,然后该线程将已经退了的票从cus_list中删除(即cus_list.remove())。判断是否有线程在等待队列中,若有,则将队列中的第一个线程唤醒,进行售票处理,然后将反馈信息发送给客户端。退票是否成功打印输出退票成功信息cus_list.remove()是输出退票失败信息客户端收到服务器端的反馈信息否等待队列是否空退票该票是否已售出否非法退票,退票失败是退票处理将所退的票售给第一个等待的线程将反馈信息发送到客户端3、 关键代码for(i=1;i<=500;i+) System.out.println("客户第"+i+"次请求");/ msg=customer.choice(); /choice产生随机数来确定客户是买票还是退票 if(msg.equals("buy") pw.println(msg); /将客户买票的信息传给服务器 System.out.println(br.readLine();/输出服务器传给客户的买到票的信息 customer.cus_list.append(br.readLine(); /将客户买到的票放入链表的最后 System.out.println(customer.cus_list+"n");/输出客户所拥有的所有票,cus_list:用一个链表存储客户所拥有的所有票 else if(msg.equals("refund") if(!customer.cus_list.isEmpty() /若客户所拥有的票不是空的,就退票 pw.println(msg); /将客户退票的信息传给服务器 pw.println(cus_number=customer.cus_list.get(1); /获取客户最先买到的那张票,将其传给服务器 msg=br.readLine();/接收服务器的反馈信息 if(!msg.equals("非法退票!退票失败!") System.out.println(msg); customer.cus_list.remove(1); /将客户所退了的票从客户所拥有的票中移除 System.out.println(customer.cus_list+"n"); /输出客户所拥有的所有票 else System.out.println(msg); else/否则,转为买票 System.out.println("客户没有票可退,转为买票"); pw.println("buy");/将买票信息传给服务器 System.out.println(br.readLine();/输出服务器传给客户的买到票的信息 customer.cus_list.append(br.readLine(); /将客户买到的票放入链表的最后 System.out.println(customer.cus_list+"n");/输出客户所拥有的所有票,cus_list:用一个链表存储客户所拥有的所有票 1)、EchoClient.javapublic class EchoServer private int port=8001; private ServerSocket serverSocket; private ExecutorService executorService; /线程池 private final int POOL_SIZE=4; /单个CPU时线程池中工作线程的数目 List<Socket> socketList=new ArrayList<Socket>(); /排队序列 public EchoServer() throws IOException serverSocket = new ServerSocket(port);serverSocket.setReceiveBufferSize(50); /创建线程池 executorService= Executors.newFixedThreadPool( POOL_SIZE); 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.printStackTrac

注意事项

本文(网络编程课程设计报告)为本站会员(枫**)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.