ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:88.09KB ,
资源ID:6614927      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6614927.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(通信软件设计实验报告网络编程.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

通信软件设计实验报告网络编程.docx

1、通信软件设计实验报告网络编程网络编程及模拟购票程序1、程序思路1.Socket简介Socket是网络上运行的两个程序间双向通行的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便地实现网络上的数据的传递。在JAVA中,专门有Socket类来处理用户的请求和响应。利用Socket类的方法,就可以实现两台计算机之间的通信。在JAVA中,可以将Socket理解为客户端或者服务端的一个特殊的对象,这个对象有两个关键的方法,一个是getInputStream()方法,另一个是getOutputStream()方法。前一个方法用于得到一个输入流,后一个方法用于得到一个输出流。Socket有两种主要

2、的操作方式:面向连接的和面向无连接的。面向连接的socket操作就像一部电话,它们必须建立一个连接和一个呼叫。所有的事情到达时的顺序与它们出发时的顺序是一样的。无连接的socket操作就像是一个邮件投递,没有什么保证,多个邮件可能到达时的顺序与出发时的顺序不一样。2.Java多线程线程的特征是:(1)在java中,程序通过流控制来执行程序流。程序中单个顺序的流控制称为线程。(2)多线程指的是在单个进程中可以同时运行多个不同的线程,执行不同的任务。多线程意味着一个程序的多行语句可以看上去几乎同时运行。多线程的应用范围很广。一般情况下,程序的某些部分同特定的事件或资源联系在一起,同时又不想为它而暂

3、停程序其它部分的执行,在这种情况下,就可以考虑创建一个线程,令他与那个事件或资源关联到一起,并让它独立于主程序运行。通过使用线程,可以避免用户在运行程序和得到结果之间的停顿,还可以让一些任务在后台运行,而用户则在前台继续完成一些其他的工作。总之,利用多线程技术,可以使编程人员方便地开发出能同时完成处理多个任务的功能强大的应用程序。二、实现关键技术点1.服务端的编写为了支持多个客户端同时访问服务端,服务端需要支持多线程来完成并发访问。在完成模拟购票的过程中,服务端初始的票数为20,在多个客户端进行访问时为避免重复购票或者购票次序混乱,需要同步购票代码块。为实现客户端与服务端实现通信,需要简单的编

4、写一个简单的通信协议。以下为服务端的代码:package server2;import java.io.IOException;import .ServerSocket;import .Socket;import java.util.ArrayList;public class ServerThread public ServerThread() ServerSocket serversocket = null; try serversocket = new ServerSocket(1234); while(true) Socket clientsocket = serversocket.a

5、ccept(); ThreadServer threadserver = new ThreadServer(clientsocket); Thread t = new Thread(threadserver); t.start(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); public static void main(String args) new ServerThread(); 通信协议及事务处理方面的代码如下:package server2;import java.io.B

6、ufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import .Socket;import java.util.ArrayList;import java.util.Iterator;import java.util.List;class ThreadServer implements Runnable private Socket cs; private Buffer

7、edReader in; private BufferedWriter out; private ArrayList ticket = new ArrayList(); public void setTicket() for(int i=0;i20;i+) ticket.add(i); public void sendMessage(String msg) try out = new BufferedWriter(new OutputStreamWriter(cs.getOutputStream(); out.write(msg); out.write(n); out.flush(); cat

8、ch (IOException e1) / TODO Auto-generated catch block e1.printStackTrace(); public String clientRequest() String msg = null; try in = new BufferedReader(new InputStreamReader(cs.getInputStream(); msg = in.readLine(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); return

9、 msg; public ThreadServer(Socket incoming) this.cs = incoming; setTicket(); public void socketClose() try cs.close(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); public void run() String msg = null; msg = clientRequest(); String tokens = msg.split(|); switch(tokens0)

10、 case search: String result = Tickets; result += ticket; sendMessage(result); break; case buy: ticket = sale(tokens1,ticket); sendMessage(tokens1); public synchronized ArrayList sale(String c,ArrayList ticket) ticket.remove(c); System.out.println(顾客购买的票号为:+c); return ticket; 2.客户端编写的关键技术点为实现客户端与服务端的

11、正常通信,通信端口需要与服务端开放的端口保持一致。为了避免通道堵塞,需要为读和写两个操作单独开两个线程。客户端对服务端的请求需要按照编写的简单协议的要求来进行。以下为客户端的代码:package buytickets;import java.io.IOException;import .Socket;import .UnknownHostException;import java.util.Scanner;import socket.ClientSocket;public class BuyerClient public BuyerClient() throws UnknownHostExce

12、ption, IOException while(true) System.out.println(欢迎选票,请选择相应操作:); System.out.println(1.查询 2.购票); Socket clientsocket = new Socket(localhost,1234); ClientSocket client = new ClientSocket(clientsocket); Scanner sc = new Scanner(System.in); int choice = sc.nextInt(); switch(choice) case 1: String msg =

13、 null; if(client.sendMessage(search) msg = client.serverResponse(); System.out.println(票号:+msg); break; case 2: System.out.println(请选择座位号:); sc = new Scanner(System.in); String ticketnumber = sc.nextLine(); String result1 = buy|+ticketnumber; if(client.sendMessage(result1) System.out.println(您购买的票号为

14、:+client.serverResponse(); break; public static void main(String args) throws UnknownHostException, IOException new BuyerClient(); 客户端中socket类的封装:package socket;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.Outp

15、utStreamWriter;import .Socket;public class ClientSocket private Socket cs; private BufferedReader in; private BufferedWriter out; public ClientSocket(Socket i) this.cs = i; public boolean sendMessage(String msg) boolean flag = false; try out = new BufferedWriter(new OutputStreamWriter(cs.getOutputSt

16、ream(); catch (IOException e1) / TODO Auto-generated catch block e1.printStackTrace(); try out.write(msg); out.write(n); out.flush(); flag = true; catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); return flag; public String serverResponse() String msg = null; try in = new

17、BufferedReader(new InputStreamReader(cs.getInputStream(); msg = in.readLine(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); return msg; public void streamClose() try in.close(); out.close(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); 三、运行结果截图1.运行服务端服务端在等待客户端连接,如图一:2.运行客户端3.执行查询票号操作4.购票4、小组成员分工成员一:负责客户端的编写成员二:负责服务端的编写5、设计难点及解决问题的收获设计难点:1.在网络编程中读和写操作经常发生堵塞。2.客户端的请求报头。3.服务端的协议解析及同步代码块的编写。4.对输入输出流的封装。收获: 通过此次网络编程,对网络数据传输的过程有了更进一步的了解和加深,对线程的同步机制有着清晰的认识,大大提高了编程能力。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1