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

你可能感兴趣的:(java)