实验五 基于UDP编程
实验目的:
1、理解UDP及基于数据报通信的基本原理;
2、学会基于UDP编程的代码编写及理解各语句内容;
3、掌握基于UDP编程的具体应用。
实验要求:
1、建立两个独立的基于UDP编程的JAVA工程,用于服务器和客户端系统;
2、建立UDP的JAVA类,并能正确运行且能实现数据报通信;
3、对JAVA类的功能进行拓广,使基于UDP编程用于某一具体的应用。
实验内容:
1、建立服务器端工程和JAVA类,类程序的原代码为:
import java.io.*;
import java.net.*;
public class UDPServerTest {
static public void main(String args[]) {
try {
DatagramSocket receiveSocket = new DatagramSocket(3245);
byte buf[] = new byte[1000];
DatagramPacket receivePacket = new DatagramPacket(buf, buf.length);
System.out.println("开始接受数据:");
while (true) {
receiveSocket.receive(receivePacket);
String name = receivePacket.getAddress().toString();
System.out.println("/n来自主机:" + name + "/n端口:"
+ receivePacket.getPort());
String s = new String(receivePacket.getData(), 0,
receivePacket.getLength());
System.out.println("接受到的数据是: " + s);
}
}
catch (SocketException e) {
e.printStackTrace();
System.exit(1);
}
catch (IOException e) {
System.out.println("网络通讯出现错误,问题在" + e.toString());
}
}
}
2、建立客户端工程和JAVA类,类程序的原代码为:
import java.io.*;
import java.net.*;
public class UDPClientTest {
public static void main(String args[]) {
try {
DatagramSocket sendSocket = new DatagramSocket(3456);
String string = "iopiopiopiopiopiopiopipio";
byte[] databyte = new byte[100];
databyte = string.getBytes();
DatagramPacket sendPacket = new DatagramPacket(databyte, string.length(),
InetAddress.getByName("10.189.0.88"), 3245);
sendSocket.send(sendPacket);
System.out.println("客户端开始传送数据!");
}
catch (SocketException e) {
System.out.println("不能打开数据报Socket,或数据报Socket无法与指定端口连接!");
}
catch (IOException ioe) {
System.out.println(ioe.toString());
}
}
}
3、调试使以上两个工程能正常运行,使服务端和客户端能正常通信。
4、对服务器端和客户端的程序代码进行阅读和理解,要求做到每条语句都能明白其具体含义,每个类都了解其功能。
5、对以上程序进行适当的修改,要求数据报通信功能保持实现。
(注:修改的方向有:图形化界面、多台电脑通信、结合线程编程等。)
6、撰写实验报告
实验报告包含:实验报告首页、实验步骤(每步的内容,有程序的要求有源码和运行结果及结果描述)、实验心得。