1. 程式人生 > 其它 >Java案例——UDP通訊程式

Java案例——UDP通訊程式

需求:

1.UDP傳送資料:資料來源於鍵盤錄入,直到輸入的資料是over,傳送資料結束

2.UDP接收資料:不知道傳送端什麼時候停止傳送,採用死迴圈方式

分析:

傳送端:

1.建立傳送端DatagramSocket物件

2.使用BufferedReader物件完成封裝鍵盤錄入資料並判斷當資料不是over時正常傳送,是over時結束髮送

3.建立資料並打包

DatagramPacket(byte[] buf, int length, InetAddress address, int port)構造用於傳送長度的分組的資料報包length`指定主機上到指定的埠號

4.呼叫DatagramSocket物件傳送資料

5.關閉傳送端

接收端:

1.建立接收端的Socket物件(DatagramSocket)要繫結指定的埠號

2.建立一個數據包,用於接收資料要注意資料包的長度

3.呼叫DatagramSocket物件的方法接收資料

4.解析資料包,並把資料在控制檯顯示

Demo

send傳送端類

package Demo042001;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/*傳送端
1.建立傳送端DatagramSocket物件
2.使用BufferedReader物件完成封裝鍵盤錄入資料並判斷當資料不是over時正常傳送,是over時結束髮送
3.建立資料並打包
DatagramPacket(byte[] buf, int length, InetAddress address, int port)` 構造用於傳送長度的分組的資料報包 `length`指定主機上到指定的埠號
4.呼叫DatagramSocket物件傳送資料
5.關閉傳送端
* */
public class SendDemo {
  public static void main(String[] args) throws IOException {
      //建立傳送端DatagramSocket物件
      DatagramSocket ds=new DatagramSocket();
      //2.使用BufferedReader物件完成封裝鍵盤錄入資料並判斷當資料不是over時正常傳送,是over時結束髮送
      BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
      String line;
      while ((line=br.readLine())!=null){
          if ("over".equals(line)){
              break;
          }
          //建立資料並打包
          //DatagramPacket(byte[] buf, int length, InetAddress address, int port)
          // 構造用於傳送長度的分組的資料報包 `length`指定主機上到指定的埠號
          byte[] bytes=line.getBytes();
          DatagramPacket dp=new DatagramPacket(bytes,bytes.length, InetAddress.getByName("cy"),12345);
          ds.send(dp);
      }
      //關閉傳送端
      ds.close();


  }
}

Recive接收端類

package Demo042001;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/*接收端
1.建立接收端的Socket物件(DatagramSocket)要繫結指定的埠號
2.建立一個數據包,用於接收資料要注意資料包的長度
3.呼叫DatagramSocket物件的方法接收資料
4.解析資料包,並把資料在控制檯顯示

* */
public class ReciveDemo {
  public static void main(String[] args) throws IOException {
      //建立接收端的Socket物件(DatagramSocket)要繫結指定的埠號
      DatagramSocket ds = new DatagramSocket(12345);
      while (true) {
          //建立一個數據包,用於接收資料要注意資料包的長度
          byte[] bytes = new byte[1024];
          DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
          //呼叫DatagramSocket物件的方法接收資料
          ds.receive(dp);
          //解析資料包,並把資料在控制檯顯示
          System.out.println("資料是:\r\n"+new String(dp.getData(),0,dp.getLength()));
      }
  }
}