沈 阳 工 程 学 院

 

学 生 实 验 报 告

 

 

 

 

 

 

实验室名称:信息工程系软件实验室

实验课程名称:计算机网络

实验项目名称:用UDP协议实现的C/S框架

班 级:计算机B191

姓 名:陈力源

  学 号: 2019537130

实验日期:2020.5.23         实验台编号:

指导教师:  郑秀颖      

批阅教师(签字):                   成绩:

一.实验目的

1.掌握网络应用程序的开发方法;

2.掌握基于UDP协议的Client/Server结构软件的设计与开发。

二.实验内容

以UDP协议为基础,以C/S方式实现数据通信功能。

三.实验前的准备

了解UDP协议的基本工作原理;

掌握C/S基本概念以及特点;

掌握相关软件编程知识。

四.实验要求及实验软硬件环境

【基本要求】

设计程序完成基于UDP协议的C/S程序;

程序主要包括客户端和服务端;

完成此项实验,完成实验报告。

【实验组织方式】

小组实验

【实验条件】

微机与编程软件。

 

五.实验步骤

 

1.熟悉UDP协议的工作机制;

 

2.熟悉在JAVA环境下使用DatagramPacket数据报实现UDP通信;

 

3.体会UDP的无连接报投递服务;

 

4.编写并调试UDP协议实现程序;

 

5.参加答辩,并撰写实验报告。

 

 

 

 

 

六.主要程序部分 java语言实现)

1.USER1

1)Frame类实现窗体

class Frame

{

       public static JTextField tf;

       private JFrame f;

       public static JTextArea ta;

       JButton bt =new JButton();

       Sendto s;

       public Frame()

       {

              init();

              s= new Sendto();       

       }

 

       private void init()

       {

 

       f=new JFrame("USER1");

       BorderLayout blayout=new BorderLayout();

       f.setLayout(blayout);

       f.setBounds(500,300,300,300);

       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      

       //文本区滚动条

       JScrollPane sp=new JScrollPane();

       ta=new JTextArea();

       sp.setViewportView(ta);

       f.add(sp,BorderLayout.CENTER);

      

       //容器里添加文本框和按钮

       JPanel p=new JPanel();

       tf =new JTextField();

       tf.setPreferredSize(new Dimension(100,21));

       bt.setText("Send");

       p.add(tf);

       p.add(bt);

       f.add(p,BorderLayout.SOUTH);

 

       //添加监听器

       ActionListener bal=new AListener();//发送

       bt.addActionListener(bal);

 

 

       //设置显示窗口

       f.setVisible(true);

       }

       class  AListener implements ActionListener

       {

              public void actionPerformed(ActionEvent e)

              {

                            s.sendAcction();

                            tf.setText("");

              }    

 

       }    

 

}

2)线程类,对DatagramSocket参数进行了设置,设置了接收数据报,接收信息并显示

class Board extends Thread

{

       DatagramPacket pack=null;

       byte data[]=new byte[8192];

       public void run()

       {     //接收数据

              DatagramSocket recieveData=null;

              try{

                     recieveData= new DatagramSocket(888);//设置端口为888

                     pack =new DatagramPacket(data,data.length);

                     }catch(Exception e){}

              while(true)

              {

                     if(recieveData==null)

                     {

                            break;

                     }

                     else

                     {

                            try{

                                   recieveData.receive(pack);//接收数据报pack

                                   int length =pack.getLength();

                                   String message=new String (pack.getData(),0,length);

                                   Frame.ta.append("USER2"+":"+message+"\n");

                                   }catch(Exception e){}

                     }

              }

       }

 

}

 

3)Sendto类,对DatagramSocket进行设置,设置了发送数据报,发送信息

 

class Sendto

{

       public void sendAcction()

       {

              Frame.ta.append("USER1"+Frame.tf.getText()+"\n");

              String str =Frame.tf.getText();//读入一个字符串

              byte buffer[]=str.getBytes();

 

              //将数据发送到本机1010端口

              try{

                     InetAddress address=InetAddress.getByName("127.0.0.1");

                     DatagramPacket dataPack =new DatagramPacket(buffer,buffer.length,address,1010);

                     DatagramSocket sentData =new DatagramSocket();

                     sentData.send(dataPack);

                     }catch(Exception e){}

                    

       }

 

}

 

4)

主类

public class User1

{

       public static void main(String args[]) throws Exception

       {

              Frame f=new Frame();

              Board b=new Board();

              b.start();

       }

 

}

2.USER2

与USER1基本一致,USER2的发送端口为USER1的接收端口,USER2的接收送端口为USER1的发送端口

 

 

 

 

 

 

  • 结果分析

 

Java udp简单练习

 

 

 

 

八.个人总结

  在这次试验前,我以为不会很难做,直到做完实验时,我才知道其实并不容易做,但学到的知识与难度成正比,使我受益匪浅。通过这次试验,让我知道了以后在做试验前,一定要将课本上的知识吃透,因为这是做实验的基础,否则,在老师讲解时就会听不懂,这将使你在做实验时难度加大,浪费做实验的宝贵时间。做完实验在老师的讲解下还能学到一些课本上没有的知识,拓宽我们的眼界,使我们认识到这门课程在生活中的应用是那么的广泛。这次试更重要的是做实验的过程,思考问题的方法,这一做其他实验是相通的,真正使我受益匪浅。

 

 

 

 

 

 

 

 

 

教师签字:            年  月 

 

相关文章: