黑马程序员—java技术blog—第二篇 UDP协议及基础应用

来源:互联网 发布:京东淘宝竞品分析 编辑:程序博客网 时间:2024/05/20 22:03
 ------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
1.采用UDP协议编写,发送端
   概述:
lDatagramSocket与DatagramPacket
l建立发送端,接收端。
l建立数据包。
l调用Socket的发送接收方法。
l关闭Socket
发送端与接收端是两个独立的运行程序
概述总结:
 UDP  不需要连接,速度快,每个数据包的大小限制在64k内,不安全,有可能丢失文件
 TCP  需要建立连接,通过三次握手完成连接,速度稍慢,连接中不限制数据包的大小, 但是安全
 在注重速度的时候使用UDP---》如:视频聊天时
 在注重安全的时候使用TCP---》如:下载文件时
 */
 *
 *步骤:
 * 1, 创建Socket对象
 * 类 DatagramSocket:  此类表示用来发送和接收数据报包的套接字
 * 构造方法:
 * DatagramSocket() 创建默认的Socket对象, 发送端
     DatagramSocket(int port) 创建指定接收端口的Socket对象, 接收端
 *
 * 2, 准备要发送的数据
 * 3, 封装数据成 数据包
 * 类 DatagramPacket : 此类表示数据报包
 * 构造方法:
 * public DatagramPacket(byte[] buf,
                      int length,
                      InetAddress address,
                      int port)
                       构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号
 * 4, 发送数据
 * public void send(DatagramPacket p)
             throws IOException从此套接字发送数据报包
   5,关闭流
例:
public class UDPSend {
 public static void main(String[] args) throws IOException {
  //1, 创建DatagramSocket对象
  DatagramSocket ds = new DatagramSocket();
  //2, 准备要发送的数据
  byte[] data = "地沟油".getBytes();
  //3, 封装数据成 数据包
  DatagramPacket dp = new DatagramPacket(data, data.length, InetAddress.getByName("192.168.35.85"), 12306); 
  //4, 发送数据
  ds.send(dp);
  //关闭流
  ds.close();
 }
2. UDP协议的接收端代码
 *
 * 步骤:
 * 1,创建DatagramSocket对象(港口)
 * DatagramSocket(int port) 创建指定接收端口的Socket对象, 接收端
 *
 * 2,创建DatagramPacket对象(仓库)
 * public DatagramPacket(byte[] buf,  int length)
 * 构造 DatagramPacket,用来接收长度为 length 的数据包。
 * 3,接收数据到仓库
 * public void receive(DatagramPacket p)
              throws IOException从此套接字接收数据报包
 * 4,从仓库中获取数据
 * public InetAddress getAddress()返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的
 * public byte[] getData()返回数据缓冲区。
 * public int getLength()返回将要发送或接收到的数据的长度。
 * 5,关闭流
 例:
public class UDPReceive {
 public static void main(String[] args) throws IOException {
  1,创建DatagramSocket对象(港口)
  DatagramSocket ds = new DatagramSocket(12306);
  2,创建DatagramPacket对象(仓库)
  byte[] buf = new byte[1024];
  DatagramPacket dp = new DatagramPacket(buf, buf.length);
  3,接收数据到仓库
  ds.receive(dp);
  4,从仓库中获取数据
  InetAddress address = dp.getAddress();
  String ip = address.getHostAddress();//获取IP地址
  byte[] data = dp.getData();//数据
  int length = dp.getLength();//数据的长度
  String dataStr = new String(data, 0, length);
  //看一个接收到的数据
  System.out.println( "ip = " + ip +", data = " + dataStr  );
  5,关闭流
  ds.close();
 ------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

0 0
原创粉丝点击