Java网络编程 06 UDP 消息发送

2.1 UDP 消息发送


发短息:不用连接,但需要知道 对方的地址!

没有 服务端和客户端的概念,只有发包。

  • 客户端步骤:
  1. 建立 一个 DatagramSocket socket 数据报 Socket

只要 你建立 数据报 Socket 就相当于 说明 自己 想用 UDP 协议!DatagramSocket socket = new DatagramSocket(/*可以写端口,也可以不写端口*/);

  1. 创建 InetAddress 用来存放 发生目标 的 IP 地址
  2. 创建 一个 数据包 DatagramPacket packet

String msg = “你好啊,服务器!”;
DatagramPacket packet=newDatagramPacket(msg.getBytes(),0,msg.getBytes().length,localhost,port);

  1. 发送数据包 socket.send(packet);
  2. 关闭 数据报 Socket 连接 socket.close();
  • 服务器端步骤:
  1. 创建 DatagramSocket 数据报 Socket (必须设定端口)
  2. 创建 byte[] 数组 用来 存储 数据包 发送过来的数据。
  3. 创建 DatagramPacket 数据包 用来 接收 数据包发送的数据。

DatagramPacketpacket=newDatagramPacket(buffer,0,buffer.length);
这样子就可以 把 接收过来的数据包 的数据 存储到 buffer 数组里了。但是我们 还需要使用 一个 开始接收数据包的方法。来开始接收!

  1. socket.receive(packet); 意思就是 开始 接收 发送过来的数据包,然后 把数据包 存到 packet 里。
    10.输出 数据包的 有关信息!

System.out.println(packet.getAddress());
System.out.println(new String(packet.getData()));

  • 客户端代码
package www.muquanyu.lesson02;

import com.sun.org.apache.bcel.internal.generic.NEW;

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

//不需要连接服务器
public class UdpDemo {
    public static void main(String[] args) throws IOException {
        //1. 建立 一个 Socket
        DatagramSocket socket = new DatagramSocket();


        //2. 发送给谁 ?

        InetAddress localhost = InetAddress.getByName("localhost");
        int port = 9090;


        //3. 建立个 数据包
        String msg = "你好啊,服务器!";
        DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length,localhost,port);

        //4. 发送个 数据包
        socket.send(packet);

        //5. 关闭连接
        socket.close();
    }
}
  • 服务器端代码
package www.muquanyu.lesson02;

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

public class Udpserver {
    public static void main(String[] args) throws IOException {
        //开放 udp 协议下的 端口
        DatagramSocket socket = new DatagramSocket(9090);
        //接收 数据包
        byte[] buffer = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);

        //阻塞接收
        socket.receive(packet);

        System.out.println(packet.getAddress());
        System.out.println(new String(packet.getData()));

        //关闭连接
        socket.close();
    }
}

在这里插入图片描述
如果 看到 这样的 输出!就证明 你成功了!

UDP 协议虽然 不安全,但是 快捷 高效,写起来 代码量 也比 TCP 协议的 代码量要少。顾虑的 东西 也少了很多。其实 我们 可以 通过对 数据包 一些 特殊的 判断 来说明 数据包是否接收成功!(这样 也可以 稍微挽救 安全性问题)。

千万要 注意,如果 你要 做 和 服务器之间的通讯,必须 开一个 UDP 协议的 端口。然后 跟这个 端口 绑定,来玩。我 在 起初 就是 开的 TCP 协议 端口。非常的 傻。因为 那时候啥也不懂。就 开了个 TCP 协议的端口,然后 用 UDP 协议。。。导致 好几次 我都接收不到 数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值