Java UDP网络编程

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

原文地址:https://www.cnblogs.com/king1302217/p/3222238.html