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();
    }
}

在这里插入图片描述
在这里插入图片描述

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