沈 阳 工 程 学 院
学 生 实 验 报 告
实验室名称:信息工程系软件实验室
实验课程名称:计算机网络
实验项目名称:用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的发送端口
| |
| 八.个人总结 在这次试验前,我以为不会很难做,直到做完实验时,我才知道其实并不容易做,但学到的知识与难度成正比,使我受益匪浅。通过这次试验,让我知道了以后在做试验前,一定要将课本上的知识吃透,因为这是做实验的基础,否则,在老师讲解时就会听不懂,这将使你在做实验时难度加大,浪费做实验的宝贵时间。做完实验在老师的讲解下还能学到一些课本上没有的知识,拓宽我们的眼界,使我们认识到这门课程在生活中的应用是那么的广泛。这次试更重要的是做实验的过程,思考问题的方法,这一做其他实验是相通的,真正使我受益匪浅。
| |
| 教 师 评 语 |
教师签字: 年 月 日 |