基于Socket的阿基米德螺线图形设计_Java基础课程设计_第1页
基于Socket的阿基米德螺线图形设计_Java基础课程设计_第2页
基于Socket的阿基米德螺线图形设计_Java基础课程设计_第3页
基于Socket的阿基米德螺线图形设计_Java基础课程设计_第4页
基于Socket的阿基米德螺线图形设计_Java基础课程设计_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、成绩南京工程学院课程设计说明书(论文)题 目 基于Socket的控制绘制阿基米德螺线 课 程 名 称 JAVA基础 院(系、部、中心) 计算机工程学院专 业 网络工程 班 级 网络132 学 号 202130834 学 生 姓 名 薛康威 设 计 地 点 信息楼A406 指 导 教 师 叶核亚 设计起止时间:2015年6月15日至2015年6月19日 基于Socket的控制绘制阿基米德螺线一、 课程设计目的和要求JAVA基础课程设计是巩固所学理论知识、提高程序设计能力的重要实践环节。课程设计的目的是,使学生能够综合应用Java基础知识和基本方法,编写实用有效的应用程序,体会软件设计的全过程,深

2、入理解和进一步巩固所学知识,培养自学能力,培养独立分析问题和解决问题的作风和能力,提高软件设计能力,为今后进行系统软件和应用软件的开发研究打下坚实基础,培养刻苦钻研精神和严谨的治学作风。本课程设计的要求是,设计具有图形用户界面的、能够响应事件、能够处理异常的Java应用程序,并包含线程、流、文件操作、网络通信等技术。进行课题的需求分析、设计方案准备、编程、运行、调试、完善等软件设计的各环节,程序必须运行通过,对于各种输入数据,有明确的不同的输出结果。程序运行有错误时,必须采取各种调试手段排除错误。二、题意说明及分析基于Socket的控制绘制阿基米德螺线,意思就是指有两个进程通过TCP建立连接,

3、其中服务端负责发送数据指令,客户端接收这些数据指令后开始绘制阿基米德螺线,建立这样一个单项传输数据的连接。加入文件操作,将服务端的这些数据保存进指定文件内,打开文件则可重新调用此前保存的数据,继续绘图。本次程序有三个重要的操作。首先是基于TCP连接的Socket通信,实现两个进程的互通,其次是传输数据时对输入输出流的操作,最后是保存和打开文件的实现(其中也涉及对流的操作)。三、算法设计与分析(1)首先得创建两个进程,分别以服务端ArchimedesServer和客户端ArchimedesClient创建,通过Socket连接。具体实现:1、服务端创建指定端口号的ServerSocket对象,调

4、用accept()方法等待接收客户端的连接请求,等待期间当前进程阻塞。2、客户端创建Socket对象,指定服务端主机的ip和端口,发送TCP连接请求。3、服务端接收客户端连接请求,进程继续运行,建立TCP连接,accept()方法返回一个Socket对象,通过该对象和客户端Socket对象实现实时数据通信。(2)由于是一对一单向通信,约定由服务端发送数据,客户端接收数据并运行。具体实现是服务端获得Socket输出流,以数据字节输出流输出。客户端获得Socket输入流,以数据字节输入流输入,读取数据流的值。发送的数据有两个,圈数和颜色(double型和int型)。(3)这里保存和读取的文件是阿基

5、米德螺线的参数,分别是圈数(double n)、颜色(int rgb)和颜色按钮数组的下标(int cl)(为了打开文件后重新调用颜色参数,从而选中该按钮)。保存文件时,以文件字节输出流打开文件,数据字节输出流写入文件内。反之,读取文件时,数据字节输入流读取文件内容,并写入圈数文本框内和选中所读取的颜色按钮,运行即可。 四、源程序服务端程序:import java.awt.*; import java.awt.event.*; import javax.swing.*; import .*;import java.io.*;public class ArchimedesServer exten

6、ds JFrame implements ActionListenerprivate DataOutputStream dout;private JPanel jp1,jp2;private JRadioButton bcolor;private JButton jb1,jb2,jb3,jb4;private JTextField text_l,text_q,text_f;private int flag=1;private double n;private int rgb,cl;private String filename;public ArchimedesServer(int port,

7、String name) throws IOExceptionsuper("绘图控制端 "+InetAddress.getLocalHost()+":"+port);this.setDefaultCloseOperation(EXIT_ON_CLOSE);jp1=new JPanel();jp2=new JPanel();text_q=new JTextField(5); text_l=new JTextField(15); text_f=new JTextField("data.data",6); jp1.add(new JLabe

8、l("圈数:"); jp1.add(text_q); jp1.add(new JLabel("颜色:"); String colorstr="红","绿","蓝" ButtonGroup colorgroup=new ButtonGroup(); bcolor=new JRadioButtoncolorstr.length; for(int i=0;i<bcolor.length;i+) bcolori=new JRadioButton(colorstri); colorgroup.add

9、(bcolori); jp1.add(bcolori); bcolori.addActionListener(this); jb1=new JButton("开始绘制"); jb1.addActionListener(this); jb2=new JButton("断开"); jb2.addActionListener(this); jb3=new JButton("保存数据"); jb3.addActionListener(this); jb4=new JButton("打开"); jb4.addActionLi

10、stener(this); jp2.add(jb1); jp2.add(jb2); jp2.add(jb3); jp2.add(text_f); jp2.add(jb4); this.getContentPane().add(jp1,"Center"); this.getContentPane().add(text_l,"North"); this.getContentPane().add(jp2,"South"); this.setVisible(true); this.pack(); ServerSocket server=new

11、 ServerSocket(port);/创建指定端口的ServerSocket对象Socket client=server.accept(); /等待连接请求this.text_l.setText("连接"+client.getPort();this.dout=new DataOutputStream(client.getOutputStream();/数据字节输出流while(flag=1)continue;dout.close();server.close();public void writeTo(String filename) try FileOutputStr

12、eam fout=new FileOutputStream(filename);DataOutputStream dout2=new DataOutputStream(fout);this.n=Double.parseDouble(text_q.getText();dout2.writeDouble(n); /圈数写入文件dout2.writeInt(cl); /颜色按钮数组下标写入文件dout2.writeInt(rgb); /颜色值写入文件dout2.close();fout.close(); catch (FileNotFoundException e) e.printStackTrac

13、e();catch(NumberFormatException nfex) JOptionPane.showMessageDialog(this, "无法转换成浮点数", "提醒", JOptionPane.WARNING_MESSAGE); catch (IOException e1) e1.printStackTrace();public void readFrom(String filename) try FileInputStream fin=new FileInputStream(filename);DataInputStream din2=n

14、ew DataInputStream(fin);this.text_q.setText(din2.readDouble()+""); /读取圈数this.bcolordin2.readInt().setSelected(true);/读取颜色按钮数组下标rgb=din2.readInt(); /读取颜色值din2.close();fin.close(); catch (FileNotFoundException e) e.printStackTrace();catch (IOException e1) e1.printStackTrace();public static v

15、oid main(String args)throws IOException new ArchimedesServer(3123,"eric");public void actionPerformed(ActionEvent e) Color c=null; if(e.getSource()=bcolor0) c=new Color(255,0,0); rgb=c.getRGB(); cl=0; if(e.getSource()=bcolor1) c=new Color(0,255,0); rgb=c.getRGB(); cl=1; if(e.getSource()=bc

16、olor2) c=new Color(0,0,255); rgb=c.getRGB(); cl=2; if(e.getSource()=jb1)try this.n=Double.parseDouble(text_q.getText();if(n<0|n>20)throw new Exception(" ");dout.writeDouble(n); /写入圈数dout.writeInt(rgb); /写入颜色值 catch(NumberFormatException nfex) JOptionPane.showMessageDialog(this, "

17、;无法转换成浮点数", "提醒", JOptionPane.WARNING_MESSAGE); catch(Exception qwe) JOptionPane.showMessageDialog(this, "圈数必须在020之间", "提醒", JOptionPane.WARNING_MESSAGE); if(e.getSource()=jb2)jb1.setEnabled(false); /断开连接if(e.getSource()=jb3)this.filename=text_f.getText();writeTo(t

18、his.filename); /保存到文件if(e.getSource()=jb4)this.filename=text_f.getText();readFrom(this.filename); /读取文件客户端程序:import java.awt.*; import javax.swing.*; import .*;import java.io.*;public class ArchimedesClient extends JFrame private ArchimedesCanvas archimedes;private DataInputStream din;private JPanel

19、 jp1;private JTextField text_q,text_c;private double n;private int rgb; public ArchimedesClient(String name,Socket socket) throws IOException super("绘画室"+name+" "+InetAddress.getLocalHost(); Dimension dim=getToolkit().getScreenSize(); this.setBounds(dim.width/4,dim.height/4,dim.w

20、idth/2,dim.height/2); this.setDefaultCloseOperation(EXIT_ON_CLOSE); text_q=new JTextField(5); text_c=new JTextField("由控制端决定!",8); text_q.setEditable(false); text_c.setEditable(false); jp1=new JPanel(); jp1.add(new JLabel("圈数:"); jp1.add(text_q); String lk=" "," &qu

21、ot; for(int i=0;i<lk.length;i+) jp1.add(new JLabel(lki); jp1.add(new JLabel("颜色:"); jp1.add(text_c); this.getContentPane().add(jp1,"North"); archimedes=new ArchimedesCanvas(Color.black,this.n); this.getContentPane().add(new JScrollPane(archimedes),"Center"); this.set

22、Visible(true); this.setTitle(this.getTitle()+":"+socket.getLocalPort(); this.din=new DataInputStream(socket.getInputStream(); /创建数据字节输入流 while(true) try text_q.setText(din.readDouble()+""); /读取圈数输入流 rgb=din.readInt(); /读取颜色值输入流 catch(EOFException e)break; this.n=Double.parseDoubl

23、e(text_q.getText(); Color c=new Color(rgb); archimedes.setn(n); archimedes.setColor(c); archimedes.repaint(); din.close(); socket.close(); public ArchimedesClient(String name,String host,int port) throws IOException this(name, new Socket(host,port); /发送连接请求 public static void main(String args)throws

24、 IOException new ArchimedesClient("kudo", "127.0.0.1",3123); class ArchimedesCanvas extends Canvas private Color color;private double x; public ArchimedesCanvas(Color color,double n) this.setBackground(Color.WHITE); this.setColor(color); this.setn(n); public void setColor(Color c

25、olor) this.color = color; public void setn(double n) this.x = n; public void paint(Graphics g) int x0 = this.getWidth()/2; int y0 = this.getHeight()/2; g.setColor(color); g.drawLine(x0,0,x0,y0*2); g.drawLine(0,y0,x0*2,y0); for (int i=0; i<2048*this.x; i+) /n圈 double angle = i*Math.PI/1024; /分成2*1024点 double radius = 0.05*angle; int x=(int)Math.round(radius*angle*Math.cos(angle); int y=(int)Math.round(radius*angle*Math.sin(angle); g.drawOval(x0+x,y0+y,1,1); 五、结果及分析实验结果如下:服务端:客户端:保存的文件:两处异常:分析说明:(1) 先运行服务端程序ArchimedesServer,再运行客户端程序ArchimedesClient。当成功连接时,“绘图控制端

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论