網絡編程UDP協議

網絡編程UDP協議
課程大綱
一、 UDP協議概述
1、 UDP是User Datagram Protocol的簡稱,是一種無連接的協議,每個數據包都是獨立的信息,包括完整的源地址和目的地址,他在網絡上以任何可能的路徑傳往目的地,因此能否到大目的地,到大目的地的時間以及正確性都是不能被保證的,每個被傳輸的數據包的大小必須保證在64K以內。
2、 主要使用以下兩個類:
(1)、DatagramPacket:此類表示數據報包
(2)、DatapramSocket:此類表示發送和接受數據報包的套接字。
二、 UDP服務器與客戶端程序
1、 服務器端:
(1)、String info = “…….”;
(2)、//將信息封裝成數據報
Byte[] bytes = Info.getBytes();
(3)、DatagramSocket dp = new DatagramSocket(bytes,0,bytes.lenth(),InetAddress.getByName(“localhost”),5000)//客戶端5000端口監。
(4)DatagramSocket server new DatagramSocket(5000);//服務器的端口。
(5)、server.send(dp);//發送數據報
(6)、server.close();
2、客戶端
(1)、byte[] b = new byte[1024];接受內容
(2)、DatagramPacket dp = new DatagramPacket(b,b.length);//接收內容
(3)、DatagramSocket client = new DatagramSocket(5000);//客戶端在5000端口等待。
(4)、client.receive(dp);接受內容
(5)、System.out.pritln(new String(dp.getData(),0,dp.getlength()))
(6)、client.close();

服務端代碼

package us.google.www;

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

/**
* UDP發送端
* @author chongrubujing
*
*/
public class UDPServerDemo {

public static void main(String[] args) throws IOException {
    String info = "我是一隻小小鳥";
    //把數據轉換成字節數組
    byte[] bytes = info.getBytes();
    //創建一個數據包對象,參數(要發送的字節數組,數組起始位置,要發送數組的長度,InetAddress,接收端端口號)
    DatagramPacket dp =new DatagramPacket(
            bytes,0,bytes.length,
            InetAddress.getByName("192.168.0.51"),
            5000);
    //創建一個UDP協議的Socket對象
    DatagramSocket ds  = new DatagramSocket(300);
    ds.send(dp);//發送數據報
    System.out.println("發送完畢!");
}

}

客戶端代碼

package us.google.www;

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

/**
* UDP接收端
* @author chongrubujing
*
*/
public class UDPClientDemo {

public static void main(String[] args) throws IOException {
    byte[] bytes = new byte[1024];
    //創建一個數據包對象
    DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
    //創建DUP協議的Socket對象
    DatagramSocket ds = new DatagramSocket(000);//在此端口進行監聽
    System.out.println("接受端正在接受數據!");
    ds.receive(dp);//接受數據,該方法會造成阻塞
    String info = new String(dp.getData(),0,dp.getLength());
    System.out.println(info);
    ds.close();

}

}

發佈了163 篇原創文章 · 獲贊 18 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章