河南工业大学实验报告(2015~2016学年-第2学期)课程名称:软件体系结构课程编号:51610192地点:6313/6316/6308/6320专业班级软件1学号姓名实验项目名称实验1:五子棋系统C/S风格客户端软件体系结构设计实验日期2015.05.15成绩评定教师签名:日期:一、实验目的:验证C/S风格的工作机制。二、实验内容:针对某个应用系统,选用C/S风格作为这个系统的软件体系结构风格。熟悉C/S风格的工作机制,对所考察的系统进行C/S风格客户端软件体系结构设计的验证。(针对不同的特定应用系统具体表述)。三.编程环境Windows7VisualStudio|Dev-C++Eclipse四.实验代码packagegame;importjava.awt.Color;importjava.awt.Graphics;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.InetAddress;importjava.net.Socket;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importpanel.Config;importpanel.MyListener;publicclassGameClientimplementsRunnable{privateSocketclient;privateintport;privateStringip;privateJFrameframe;privateInputStreamin;privateOutputStreamout;privateStringname;privatebooleanflag=false;publicGameClient(JFrameframe){this.frame=frame;init();}/***判断是否建立了连接*/privatebooleanconfirm()throwsIOException{byte[]buf=newbyte[64];intn=in.read(buf);name=newString(buf,0,n);return(name.length()0)?true:false;}/***接收初始化信息**@throwsIOException*/privatevoidresetUI()throwsIOException{bytebuf[]=newbyte[64];intn=in.read(buf);//System.out.println(s);String[]numberStrs=newString(buf,0,n).split(#);//System.out.println(numberStrs.toString());Config.SIZE=Integer.parseInt(numberStrs[0]);Config.ROW=Integer.parseInt(numberStrs[1]);Config.CLOUNM=Integer.parseInt(numberStrs[2]);frame.setSize(2*Config.STARTX+Config.CLOUNM*Config.SIZE,Config.STARTY+Config.SIZE*(Config.ROW+1));Config.resetChess(newbyte[Config.ROW+1][Config.CLOUNM+1]);frame.paint(frame.getGraphics());}publicvoidrun(){try{InetAddressaddress=InetAddress.getByName(ip);client=newSocket(address,port);in=client.getInputStream();out=client.getOutputStream();if(!confirm()){newMyDialog(frame,连接服务器失败,true).setVisible(true);return;}resetUI();frame.setTitle(五子棋+已连接:+name+的游戏:本机端口号:+client.getLocalPort());//1,设置棋子颜色Config.setColor(Color.WHITE);//2,交替下棋MyListenerpolice=newMyListener();while(true){if(flag){frame.addMouseListener(police);while(Config.getX()==-1){Thread.sleep(20);}intx=Config.getX();inty=Config.getY();Config.clearNotify();Graphicsg=frame.getGraphics();g.setColor(Config.getColor());g.fillOval(x-(Config.SIZE/2),y-(Config.SIZE/2),Config.SIZE-5,Config.SIZE-5);//将位置转换为坐标并发送给服务器端x=(x-Config.STARTX)/Config.SIZE;y=(y-Config.STARTY)/Config.SIZE;bytebuf[]=newbyte[2];buf[0]=(byte)x;buf[1]=(byte)y;out.write(buf);if(Config.isWin(Color.BLACK)){newMyDialog(frame,Color.BLACK).setVisible(true);}elseif(Config.isWin(Color.WHITE)){newMyDialog(frame,Color.WHITE).setVisible(true);}flag=!flag;frame.removeMouseListener(police);}else{byte[][]buf=newbyte[Config.ROW+1][Config.CLOUNM+1];for(inti=0;i=Config.ROW;i++){in.read(buf[i]);}Config.resetChess(buf);frame.paint(frame.getGraphics());if(Config.isWin(Color.BLACK)){newMyDialog(frame,Color.BLACK).setVisible(true);}elseif(Config.isWin(Color.WHITE)){newMyDialog(frame,Color.WHITE).setVisible(true);}flag=true;}}}catch(Exceptione){e.printStackTrace();newMyDialog(frame,连接服务器失败,true).setVisible(true);return;}}publicvoidthreadDestory()throwsException{in.close();out.close();client.close();}privatevoidinit(){String[][]initValue=newString[][]{{IP地址:,127.0.0.1},{端口:,7777}};//创建创建账号的对话框MyDialoginitDialog=newMyDialog(frame,请输入对方地址,true,initValue);initDialog.setVisible(true);//获得输入数据String[]nameAndPort=initDialog.getValue();if(nameAndPort==null){return;}this.ip=nameAndPort[0];try{this.port=Integer.valueOf(nameAndPort[1]);//判断端口号是否正确if(port=0||port65536){StringerrMsg=错误的端口号+nameAndPort[1]+。端口号必须在0和65536之间;JOptionPane.showMessageDialog(frame,errMsg,错误的端口号,JOptionPane.ERROR_MESSAGE);return;}}catch(NumberFormatExceptionex){JOptionPane.showMessageDialog(frame,输入的端口号不是数字。,错误的端口号,JOptionPane.ERROR_MESSAGE);return;}Config.setPort(port);Config.clearChess();frame.paint(frame.getGraphics());}}五.实验结果图1河南工业大学实验报告(2015~2016学年-第2学期)课程名称:软件体系结构课程编号:51610192地点:6313/6316/6308/6320专业班级学号姓名实验项目名称实验2:五子棋系统C/S风格服务器软件体系结构设计实验日期2015.05.15成绩评定教师签名:日期:一、实验目的:验证C/S风格的工作机制。二、实验内容:针对某个应用系统,选用C/S风格作为这个系统的软件体系结构风格。熟悉C/S风格的工作机制,对所考察的系统进行C/S风格服务器软件体系结构设计的验证。(针对不同的特定应用系统具体表述)。三.编程环境Windows7VisualStudio|Dev-C++Eclipse四.实验代码packagegame;importjava.awt.Color;importjava.awt.Graphics;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.ServerSocket;importjava.net.Socket;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importpanel.Config;importpanel.MyListener;publicclassGameServerimplementsRunnable{privateServerSocketserver;privateSocketclient;privateJFrameframe;privateintport;privateStringname;privateInputStreamin;privateOutputStreamout;privatebooleanflag=true;publicGameServer(JFrameframe){this.frame=frame;}publicvoidthreadDestory()throwsException{in.close();out.close();client.close();server.close();}/***确认连接*/privatevoidconfirm()throwsIOException{out.write(name.getBytes());}privatevoidsendUI()throwsIOException{Strings=newString(Config.SIZE+#+Config.ROW+#+Config.CLOUNM);out.write(s.getBytes());}publicvoidrun(){init();try{server=newServerSocket(Config.getPort());client=