實驗五 基於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、撰寫實驗報告
實驗報告包含:實驗報告首頁、實驗步驟(每步的內容,有程序的要求有源碼和運行結果及結果描述)、實驗心得。