UDP也是网络通讯中的一个重要协议,与TCP区别可参见浅谈TCP/IP 和 UDP的区别,本文就对Java UDP通讯做一个简单例子介绍
服务端:
package wyf; import java.io.*; import java.net.*; public class UdpServer { public static void main(String[] args) throws IOException { //新建一个DatagramSocket DatagramSocket server = new DatagramSocket(5050); //接收客户端发送来的消息 byte[] recvBuf = new byte[100]; DatagramPacket recvPacket = new DatagramPacket(recvBuf, recvBuf.length); server.receive(recvPacket); String recvStr = new String(recvPacket.getData(), 0, recvPacket .getLength()); System.out.println("客户端传来消息:" + recvStr); //往客户端发送消息 int port = recvPacket.getPort(); InetAddress addr = recvPacket.getAddress(); String sendStr = "Hello ! I'm Server"; byte[] sendBuf; sendBuf = sendStr.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendBuf, sendBuf.length,addr, port); server.send(sendPacket); //关闭DatagramSocket server.close(); } }
客户端:
package wyf; import java.io.*; import java.net.*; public class UdpClient { public static void main(String[] args) throws IOException { //新建一个DatagramSocket DatagramSocket client = new DatagramSocket(); //往服务端发送消息 String sendStr = "Hello! I'm Client"; byte[] sendBuf; sendBuf = sendStr.getBytes(); InetAddress addr = InetAddress.getByName("127.0.0.1"); int port = 5050; DatagramPacket sendPacket = new DatagramPacket(sendBuf, sendBuf.length, addr, port); client.send(sendPacket); //接受服务端传来的消息 byte[] recvBuf = new byte[100]; DatagramPacket recvPacket = new DatagramPacket(recvBuf, recvBuf.length); client.receive(recvPacket); String recvStr = new String(recvPacket.getData(), 0, recvPacket.getLength()); System.out.println("服务端传来消息:" + recvStr); //关闭DatagramSocket client.close(); } }
服务端启动后,会接收客户端传来的消息,然后往客户端发送一条消息,服务端输出如下:
客户端传来消息:Hello! I'm Client
客户端启动后,会首先往服务端发送一掉消息,然后接收服务端发送的消息,客户端输出如下:
服务端传来消息:Hello ! I'm Server
备注:
可以看到,Java UDP编程,服务端和客户端的流程都是一致的,首先申请一个DatagramSocket,接收数据使用DatagramSocket.receive(),发送数据使用DatagramSocket.send(),关闭连接使用DatagramSocket.close()。
与TCP/IP通讯不同,UDP编程中并没有服务端和客户端的概念,服务端和客户端的代码其实都是一致的。TCP/IP是面向连接的,而UDP是非面向连接的。因此,UDP发送数据时,要将数据包和发送的IP、端口都要放到DatagramPacket中进行发送,不像TCP/IP中,建立好连接直接发送即可。