1. 程式人生 > >三、UDP實現簡單的socket通訊例項

三、UDP實現簡單的socket通訊例項

1.伺服器端程式碼

package udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * 類功能描述:伺服器端,先啟動伺服器端後啟動客戶端
 *
 * @author:***
 * @createTime:2018/11/7 10:07
 */
public class Server {
    public static void main(String[] args) {
        try {
            /**
             * 接收客戶端資料
             */
            //1.建立伺服器端datagramSocket
            DatagramSocket socket = new DatagramSocket(18081);
            //2.建立資料報,用於接收客戶端傳送的資料
            byte[] data = new byte[1024];
            DatagramPacket packet = new DatagramPacket(data, data.length);
            System.out.println("伺服器已經啟動,等待客戶端傳送資料:");
            //3.接收客戶端傳送的資料(接收資料報之前一直阻塞)
            socket.receive(packet);
            //4.讀取客戶端傳送的資料
            String info = new String(data, 0, packet.getLength());
            System.out.println("接收客戶端傳送資訊為:" + info);

            /**
             * 向客戶端響應資料
             */
            InetAddress address = packet.getAddress();
            byte[] resData = "伺服器響應資訊".getBytes();
            DatagramPacket resPacket = new DatagramPacket(resData, resData.length, address, packet.getPort());
            socket.send(resPacket);
            System.out.println("向客戶端傳送資料成功!");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

2.客戶端程式碼

package udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.Socket;

/**
 * 類功能描述:客戶端
 *
 * @author:***
 * @createTime:2018/11/7 10:14
 */
public class Client {
    public static void main(String[] args) {
        try {
            /**
             * 向伺服器傳送資訊
             */
            //1.定義伺服器地址 埠 資料
            InetAddress address = InetAddress.getLocalHost();
            byte[] data = "客戶端發往伺服器的資料".getBytes();
            //2.建立資料報
            DatagramPacket packet = new DatagramPacket(data, data.length, address, 18081);
            //4.向伺服器傳送資料
            DatagramSocket socket = new DatagramSocket();
            socket.send(packet);
            System.out.println("向伺服器傳送資料成功!");
            /**
             * 接收伺服器響應資訊
             */
            byte[] reqData = new byte[1024];
            DatagramPacket reqPacket = new DatagramPacket(reqData, reqData.length);
            socket.receive(reqPacket);
            String info = new String(reqData, 0, reqPacket.getLength());
            System.out.println("接收伺服器的響應資料為:" + info);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}