java網絡編程-UDP

網絡基礎知識

  • 每個計算設備上都有若干個網卡
  • 每個網卡上有(全球唯一)單獨的硬件地址,MAC地址
  • tracert 查看當前機器和目標機器的訪問中繼,例如:tracert
  • 通訊協議:TCP和UDP
  • TCP:Transmission Control Protocol
    – 傳輸控制協議,面向連接的協議
    – 兩臺機器的可靠無差錯的數據傳輸
    – 雙向字節流傳輸
  • UDP:User Datagram Protocol
    – 用戶數據報協議,面向無連接協議
    – 不保證可靠的數據傳輸
    – 速度快,也可以在較差網絡下使用

UDP

  • DatagramSocket: 通訊的數據管道
    – send 和 receive方法,每一方都可以send和receive
    –(可選,多網卡)綁定一個IP和Port
  • DatagramPacket
    – 集裝箱:封裝數據
    – 地址標籤:目的地IP+Port
  • 實例
    – 無主次之分
    – 接收方必須早於發起方執行

UDP示例:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * @ClassName:UdpRecv
 * @Description:接收方,需要先開啓
 * @author: Torey
 */
public class UdpRecv {
    public static void main(String[] args) throws IOException, InterruptedException {
        DatagramSocket ds = new DatagramSocket(3000);
        byte[] bytes = new byte[1024];
        DatagramPacket dp=new DatagramPacket(bytes,1024);
        System.out.println("UdpRecv:我在等待消息");
        ds.receive(dp);
        System.out.println("UdpRecv,:我接收到消息");
        String strRecv=new String(dp.getData(),0,dp.getLength())+" from "+dp.getAddress().getHostAddress()+":"+dp.getPort();
        System.out.println(strRecv);
        Thread.sleep(1000);
        System.out.println("UdpRecv:我要發信息");
        String str="UdpRecv: I'm LiMing,Hello";
        DatagramPacket dp2=new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("127.0.01"),dp.getPort());
        ds.send(dp2);
        System.out.println("UdpRecv:我發送信息結束");
        ds.close();

    }
}
import java.io.IOException;
import java.net.*;

/**
 * @ClassName:UdpSend
 * @Description:發送方
 * @author: Torey
 */
public class UdpSend {
    public static void main(String[] args) throws IOException, InterruptedException {
        //定義數據管道
        DatagramSocket ds=new DatagramSocket();
        String str="UdpSend,AAA:Hello,xiaoMing";
        DatagramPacket datagramPacket=new DatagramPacket(str.getBytes(),str.length(),
                InetAddress.getByName("127.0.0.1"),3000);
        System.out.println("UdpSend:發送信息");
        ds.send(datagramPacket);
        System.out.println("UdpSend:發送信息結束");
        Thread.sleep(1000);
        byte[] buf=new byte[1024];
        DatagramPacket dp2 = new DatagramPacket(buf, 1024);
        System.out.println("UdpSend:我在等待信息");
        ds.receive(dp2);
        System.out.println("UdpSend:我接收到信息");
        String str2=new String(dp2.getData(),0,dp2.getLength())
                +" from "+dp2.getAddress().getHostAddress()+":"+dp2.getPort();
        System.out.println(str2);
        ds.close();
    }
}

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章