2.1 UDP 消息发送
发短息:不用连接,但需要知道 对方的地址!
没有 服务端和客户端的概念,只有发包。
- 客户端步骤:
- 建立 一个 DatagramSocket socket 数据报 Socket!
只要 你建立 数据报 Socket 就相当于 说明 自己 想用 UDP 协议!
DatagramSocket socket = new DatagramSocket(/*可以写端口,也可以不写端口*/);
- 创建 InetAddress 用来存放 发生目标 的 IP 地址
- 创建 一个 数据包 DatagramPacket packet
String msg = “你好啊,服务器!”;
DatagramPacket packet=newDatagramPacket(msg.getBytes(),0,msg.getBytes().length,localhost,port);
- 发送数据包 socket.send(packet);
- 关闭 数据报 Socket 连接 socket.close();
- 服务器端步骤:
- 创建 DatagramSocket 数据报 Socket (必须设定端口)
- 创建 byte[] 数组 用来 存储 数据包 发送过来的数据。
- 创建 DatagramPacket 数据包 用来 接收 数据包发送的数据。
DatagramPacketpacket=newDatagramPacket(buffer,0,buffer.length);
这样子就可以 把 接收过来的数据包 的数据 存储到 buffer 数组里了。但是我们 还需要使用 一个 开始接收数据包的方法。来开始接收!
- 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 协议。。。导致 好几次 我都接收不到 数据。