《最新java实验报告二.doc》由会员分享,可在线阅读,更多相关《最新java实验报告二.doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品资料java实验报告二.Java技术实验报告实验一: 2017 年09 月 日学院计算机与信息学院专业班级 姓名成绩课程名称Java技术实验项目名 称 实验二 基于GUI的网络通信程序设计指导教师薛峰教师评语 教师签名: 年 月 日一、 实验目的1掌握Java中GUI程序的编写,包括事件监听机制。2掌握Java的网络通信编程,ServerSocket,Socket类的使用。3掌握Java中多线程的编程,Thread类,Runnable接口的使用。4掌握用面向对象的方法分析和解决复杂问题。二、实验原理编写程序完成以下功能:1.设计一个基于GUI的客户-服务器的通信应用程序,如图1,图2所示。
2、图1 Socket通信服务器端界面图2 Socket通信客户端界面2.图1为Socket通信服务器端界面,点击该界面中的【Start】按钮,启动服务器监听服务(在图1界面中间的多行文本区域显示“Server starting”字样)。图2为Socket通信客户端界面,点击该界面中的【Connect】按钮与服务器建立链接,并在图2所示界面中间的多行文本区域显示“Connect to server”字样,当服务器端监听到客户端的连接后,在图1界面中间的多行文本区域追加一行“Client connected”字样,并与客户端建立Socket连接。3.当图1所示的服务器端和图2所示的客户机端建立Soc
3、ket连接后,编程实现服务端、客户端之间的“单向通信”:在客户端的输入界面发送消息,在服务端接收该消息,并将接收到对方的数据追加显示在多行文本框中。三、使用硬件、软件环境PC 计算机一台,配置为CPU为1.5G,内存为512M,硬盘为40G,安装WindowsXP操作系统。另外,使用eclipse,JDK1.6.0等软件四、 实验过程、步骤及原始记录(算法、原程序、测试结果,分析等)1、 先实现awt的界面编程,编写程序框,文字输入框,文本框等,并在按钮处插入actionlistener。2、 编写Listen1和Listen2来分别监听Start按钮和say按钮。并在服务器与客户端各编写一个
4、线程用来接收对方发来的信息。服务器中的start创建serversocket然后等待客户端的start创建socket。连接成功后两者分别开启接收信息的线程。Say按钮按下时listen2发送信息去另一端口。3、 源代码 package net;import java.awt.*;import java.io.*;import java.awt.event.*;import .*;public class ServerFrame extends Frame public ServerFrame(String title) super(title);Panel northPanel,center
5、Panel,southPanel;TextField tfport,tfsay,tfIP;Label labelPort,labelSay,labelIP;Button btStart,btSay;TextArea tamsg;ServerSocket s=null;Socket client=null;InputStream is=null;PrintWriter os=null;Listen1 ls1=new Listen1();Listen2 ls2=new Listen2();BufferedReader hear;void initGUI() northPanel=new Panel
6、(); centerPanel=new Panel(); southPanel=new Panel();add(northPanel,North); add(centerPanel,Center); add(southPanel,South);btStart=new Button(start); btSay=new Button(say);btStart.addActionListener(ls1); btSay.addActionListener(ls2);labelSay=new Label(Say); labelPort=new Label(port);tfport=new TextFi
7、eld(3000,60); tfsay=new TextField(60);tamsg= new TextArea(16,75);northPanel.add(labelPort); northPanel.add(tfport); northPanel.add(btStart);centerPanel.add(tamsg);southPanel.add(labelSay); southPanel.add(tfsay);southPanel.add(btSay);pack();setVisible(true);addWindowListener(new WindowAdapter() /Adds
8、 the specified window listener to receive window events from this windowpublic void windowClosing(WindowEvent e) System.exit(0););public static void main(String args) ServerFrame server=new ServerFrame(服务器);server.initGUI(); class serverThread extends Thread InputStream is=null; public void run() tr
9、y is=client.getInputStream();hear=new BufferedReader(new InputStreamReader(is);tamsg.append(hear.readLine(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();System.exit(1); class Listen1 implements ActionListener Override public void actionPerformed(ActionEvent e) tamsg.ap
10、pend(server starting); try s=new ServerSocket(3000);tamsg.append(asdhasd); catch (IOException e1) System.exit(1);/ TODO Auto-generated catch blocke1.printStackTrace();try client=s.accept(); catch (IOException e1) System.exit(1);/ TODO Auto-generated catch blocke1.printStackTrace();try os=new PrintWr
11、iter(client.getOutputStream(),true); catch (IOException e1) System.exit(1);/ TODO Auto-generated catch blocke1.printStackTrace(); serverThread is1=new serverThread(); is1.start(); class Listen2 implements ActionListener Override public void actionPerformed(ActionEvent e) if(tfsay.getText()!=) tamsg.
12、append(tfsay.getText()+n); os.write(tfsay.getText()+n); os.flush(); tfsay.setText(); -package net;import java.awt.*;import java.io.*;import java.awt.event.*;import .*;public class ClientFrame extends Framepublic ClientFrame(String title) super(title);Panel northPanel,centerPanel,southPanel;TextField
13、 tfport,tfsay,tfIP;Label labelPort,labelSay,labelIP;Button btStart,btSay;TextArea tamsg;Socket s;PrintWriter out;BufferedReader in;Listen1 ls1=new Listen1();Listen2 ls2=new Listen2();void initGUI() northPanel=new Panel(); centerPanel=new Panel(); southPanel=new Panel();add(northPanel,North); add(cen
14、terPanel,Center); add(southPanel,South);btStart=new Button(Connect); btSay=new Button(say);btStart.addActionListener(ls1); btSay.addActionListener(ls2);labelSay=new Label(Say); labelIP=new Label(IP); labelPort=new Label(port);tfport=new TextField(3000,25); tfsay=new TextField(60); tfIP=new TextField
15、(127.0.0.1,25);tamsg= new TextArea(16,75);northPanel.add(labelIP); northPanel.add(tfIP);northPanel.add(labelPort); northPanel.add(tfport); northPanel.add(btStart);centerPanel.add(tamsg);southPanel.add(labelSay); southPanel.add(tfsay);southPanel.add(btSay);pack();setVisible(true);addWindowListener(ne
16、w WindowAdapter() /Adds the specified window listener to receive window events from this windowpublic void windowClosing(WindowEvent e) System.exit(0););public static void main(String args) ClientFrame client=new ClientFrame(客户端);client.initGUI();class Listen1 implements ActionListenerpublic void ac
17、tionPerformed(ActionEvent e) try String ip=tfIP.getText();int port=Integer.parseInt(tfport.getText();s=new Socket(ip,port);tamsg.append(Client connected);ClientThread cf=new ClientThread();cf.start();catch(Exception ew) System.exit(1);ew.getMessage();class Listen2 implements ActionListenerpublic voi
18、d actionPerformed(ActionEvent e) try out=new PrintWriter(s.getOutputStream(); catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace();System.exit(1);if(tfsay.getText()!=) tamsg.append(tfsay.getText()+n);out.write(tfsay.getText()+n);out.flush();tfsay.setText();class ClientThread
19、extends Thread public void run() try in = new BufferedReader(new InputStreamReader(s.getInputStream();String s = in.readLine();while (s != null) tamsg.append(s + n);s = in.readLine(); catch (Exception ee) 五、实验结论、分析、思考题与心得体会通过本次实验,我有以下几方面的收获、认识和体会:1、学会了在三种环境下编写程序及运行程序的方法;2、加深了Java中相关语法的认识:在初次录入源程序时,我将public写成了Public,导致编译出错,结合语法我认识到Java是严格区分大小写的。3、学会了socket的使用以及awt的界面实现。4、在这个程序中要注意在输入后要清空对话框,不然就只能发送一条信息。5、这两者的线程互不影响,所以只用考虑serversocket处可能产生的线程阻塞。