Java UDP网络编程 - 最简单示例

时间:2022-11-18 03:52:33

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中,建立好连接直接发送即可。