1、 UDP:向应用程序提供了一种发送封装的原始IP数据报的方法、并且发送时无需建立连接,是一种不可靠的连接,效率高;数据报/非连接
2、 Socket:两个Java应用程序可通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket、Socket通常用来实现client—server连接、java.net包中定义的两个Socket和ServerSocket,分别用来实现双向连接的client和server端、建立连接时所需的寻址信息为远程计算机的IP地址和端口号(Port number)——TCP端口 UDP端口分开,每一个65536个端口
2、 Socket:两个Java应用程序可通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket、Socket通常用来实现client—server连接、java.net包中定义的两个Socket和ServerSocket,分别用来实现双向连接的client和server端、建立连接时所需的寻址信息为远程计算机的IP地址和端口号(Port number)——TCP端口 UDP端口分开,每一个65536个端口
import java.net.*;
import java.io.*;
public class TestUDPClient { // 将long类型数转换为字节数组
public static void main(String args[]) throws Exception {
long n = 10000L;
ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 以字节数组形式输出
DataOutputStream dos = new DataOutputStream(baos); // 创建数据输出流
dos.writeLong(n); // 将n写入字节数组
byte[] buf = baos.toByteArray(); // 定义字节数组,字符串解析为字节数组
System.out.println(buf.length);
// 创建数据报
DatagramPacket dp = new DatagramPacket(buf, buf.length,
new InetSocketAddress("127.0.0.1", 5678));
DatagramSocket ds = new DatagramSocket(9999);
ds.send(dp); // 发送数据报
ds.close();
}
}
import java.net.*;
import java.io.*;
public class TestUDPServer {
public static void main(String args[]) throws Exception {
byte buf[] = new byte[1024]; // 申请1K内存空间
DatagramPacket dp = new DatagramPacket(buf, buf.length);// 创建包裹用来接收数据
DatagramSocket ds = new DatagramSocket(5678);// UDP的socket,5678端口
while (true) {
ds.receive(dp); // 接收数据报,存放在buf[]中,如果没接收到数据则一直等待
ByteArrayInputStream bais = new ByteArrayInputStream(buf); // 接收字节数组,放入buf[]中
DataInputStream dis = new DataInputStream(bais); // 创建数据输入流
System.out.println(dis.readLong()); // 转换为long类型
}
}
}