基于UDP的Socket网络编程
UDP协议:它是一种无需连接的不可靠协议。
特点:传输速度快,操作灵活,但是数据可能丢失。
UDP 协议类似于发短信,接收人有可能接收不到传递的信息。
服务器
(1)创建DatagramScoket套接字,指定接收信息的端口号。
(2)创建数据报,用于存储接收的信息。
(3)接收信息,存储到数据报中。
(4)关闭DatagramScoket套接字
package com.udp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPServer {
public static void main(String[] args) throws Exception {
// 创建套接字
// 接收的一方需要端口号(服务器)
DatagramSocket ds = new DatagramSocket(9999);
// 通信:接收信息
byte [] buf = new byte[1024];
DatagramPacket p = new DatagramPacket(buf, 0, buf.length);
ds.receive(p);
System.out.println(p.getLength());
System.out.println(new String(buf));
// 关闭套接字
ds.close();
}
}
客户端
(1)创建DatagramScoket套接字。
(2)创建数据报,用于存储要发送的信息。
(3)发送信息
(4)关闭DatagramScoket套接字
package com.udp;
import java.io.FileOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPClient {
public static void main(String[] args) throws Exception {
// 创建套接字
DatagramSocket ds = new DatagramSocket();
// 通信:发送信息,将字符串转化为字节数组
byte [] buf = "你好,服务器".getBytes();
// 通过IP和端口号进行信息发送,以下两种方式都可
// InetSocketAddress address = new InetSocketAddress("localhost", 9999);
// DatagramPacket p = new DatagramPacket(buf,0, buf.length, address);
InetAddress address = InetAddress.getByName("localhost");
DatagramPacket p = new DatagramPacket(buf,0, buf.length, address, 9999);
ds.send(p);
// 关闭套接字
ds.close();
}
}