数据的发送与接收(UDP程序)
TCP最大的特点是可靠的网络连接,在网络程序开发之中还存在有一种UDP的程序,基于数据报的网络编程实现,如果要想实现UDP程序需要两个类:
- DatagramPacket(包含的数据内容)
- DatagramSocket(网络的发送与接收)
数据报就好比发送的短消息一样,客户端是否接受到与发送者无关。
范例:实现UDP程序
服务端
package UDPModel.server;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPServer {
public static void main(String[] args) throws Exception{
DatagramSocket server = new DatagramSocket(1111); //连接到1111端口
String str = "Hello Word!"; //要发送的内容
//要发送的消息对象
/**
* 分组数据 str.getBytes() 转为字节数组
* 分组数据偏移量 0 数据起始位置
* 分组数据长度 str.length() 字符串长度
* 目的地址 InetAddress.getByName("localhost") 根据主机名称确定主机的IP地址。
* 目标端口号 1010 端口
*/
DatagramPacket packet = new DatagramPacket(str.getBytes(),0,str.length(),
InetAddress.getByName("localhost"),1010); //发送给1010端口
server.send(packet);//发送数据
System.out.println("消息发送完毕");
server.close();
}
}
客户端
package UDPModel.client;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPClient {
public static void main(String[] args) throws Exception{
DatagramSocket client = new DatagramSocket(1010); //连接到1010端口
byte[] data = new byte[1024]; //接收消息
DatagramPacket packet = new DatagramPacket(data,data.length); //接收数据的对象
System.out.println("客户端等待接收的消息......");
client.receive(packet); //接收消息,所有消息都在data字节数组之中
System.out.println("接收到的消息内容为"+new String(data,0,packet.getLength()));
client.close();
}
}
先打开客户端等待接收,通过服务端发送给客户端,客户端接收。
- 客户端:客户端等待接收的消息......
- 服务端:消息发送完毕
- 客户端:客户端等待接收的消息......
接收到的消息内容为Hello Word!
UDP发送的数据一定是不可靠的,但是TCP由于需要保证可靠的连接,所以需要服务器的资源就越多。