Socket使用的tcp连接,需要先连接之后才能发送数据。
DatagramSocket使用的UDP连接,客户端不需要先连接数据,可以直接发送给指定服务端。
发送端:
package inet;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
//不需要连接服务器
public class UDPDemo1 {
public static void main(String[] args) throws Exception {
//建立一个socket
DatagramSocket dgs=new DatagramSocket();
//建立一个包
String msg="hello,server!";
//发送给谁
InetAddress ad = InetAddress.getByName("localhost");
int port=9090;
//数据,数据的长度起始,连接对象地址,端口
DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,ad,port);
//发送包
dgs.send(datagramPacket);
//关闭流
dgs.close();
}
}
接收端:
package inet;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPDemo2 {
public static void main(String[] args) throws Exception {
//开放端口
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().getHostAddress());
System.out.println(new String(packet.getData(),0,packet.getLength()));
//关闭连接
socket.close();
}
}