网络编程--基于UDP的Socket编程

1、使用无连接的数据报(UDP)进行通信

(1)什么是Datagram?
  • 数据报是网上传输的独立数据包,数据报是否能够正确地到达目的地,到达的时间,顺序,内容的正确性均没有保障。
(2)Java中使用Datagram与DatagramPacket类来完成数据报(UDP)进行通信。
(3)DatagramSocket类利用UDP协议来实现客户与服务器的Socket。
(4)send:发送数据报
(5)recieve:接收数据报

2、基于UDP的Socket编程

本个示例包含两端代码:UDPServer和UDPClient。UDPServer先启动,并等待UDPClient和自己打招呼。当UDPClient和自己打招呼后,UDPServer回应UDPClient。具体代码如下:
(1)UDPServer

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * 使用UDP进行通信
 * 服务端
 * @author Chuan
 *
 */
public class UDPServer
{
    public static void main(String[] args) throws IOException
    {
        DatagramSocket ds = new DatagramSocket(5000);
        
        /*
         * 接收客户端的消息
         */
        //创建用于接收客户端发送的数据报的数据报
        byte[] buffer = new byte[1024];
        DatagramPacket packetRec = new DatagramPacket(buffer, buffer.length);
        ds.receive(packetRec);
        //处理接收到的数据
        String msg = new String(buffer, 0, packetRec.getLength()); //packetRec.getLength()
        System.out.println(msg);
        
        /*
         * 向客户端发送消息
         */
        byte[] str = "welcom".getBytes();
        DatagramPacket packetSend = new DatagramPacket(str, str.length, 
                packetRec.getAddress(),packetRec.getPort());
        ds.send(packetSend);
        
        //关闭socket
        ds.close();
    }
}

(2)UDPClient

/**
 * 使用UDP进行通信
 * 客户端
 * @author Chuan
 *
 */
public class UDPClient
{
    public static void main(String[] args) throws IOException
    {
        DatagramSocket dS = new DatagramSocket();
        
        /*
         * 向服务端发送消息
         */
        byte[] str = "hello".getBytes();
        DatagramPacket dpSend = new DatagramPacket(str, str.length, 
                InetAddress.getByName("localhost"),5000);
        dS.send(dpSend);
        
        /*
         * 接收服务端的消息
         */
        byte[] msg = new byte[1024];
        DatagramPacket dpRecieve = new DatagramPacket(msg, msg.length);
        dS.receive(dpRecieve);
        System.out.println(new String(msg, 0, dpRecieve.getLength()));
        
        dS.close();
    }
}

你可能感兴趣的:(网络编程--基于UDP的Socket编程)