基於UDP協議的Socket通信


服務器端

package demo5;

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


/**
 * 服務器端,實現基於UDP的用戶登錄
 *@ClassName UDPServer
 *@Author DiYun
 *@Version 1.0
 **/
public class UDPServer {
    public static void main(String[] args) throws IOException {
        //1.創建服務器端DatagramSocket  指定端口
        DatagramSocket socket = new DatagramSocket(8800);
        //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();
        int port = packet.getPort();
        byte[] data2 = "歡迎您".getBytes();
        //2.創建數據包,包含響應的數據信息
        DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
        //3.響應客戶端
        socket.send(packet2);
        //關閉資源
        socket.close();
    }
}

 

 

客戶端

package demo5;/**
 * @author ydy
 * Create By ydy on 2019/1/24
 */

import java.io.IOException;
import java.net.*;

/**
 * 基於UDP 客戶端
 *@ClassName UDPClient
 *@Description TODO
 *@Author DiYun
 *@Date 2019/1/24 20:01
 *@Version 1.0
 **/
public class UDPClient {
    public static void main(String[] args) throws IOException {
        //1.定義服務器的地址,端口號,數據
        InetAddress address = InetAddress.getByName("localhost");
        int potr = 8800;
        byte[] data = "用戶名:admin; 密碼: 123".getBytes();
        //2.創建數據包,包含發送的數據信息
        DatagramPacket packet = new DatagramPacket(data, data.length, address, potr);
        //3.創建DatagramSocket對象
        DatagramSocket socket = new DatagramSocket();
        //4.向服務端發送數據包
        socket.send(packet);


        /**
         * 接收服務器端響應的數據
         */
        //1.創建數據包,用於接收服務器端響應的數據
        byte[] data2 = new byte[1024];
        DatagramPacket packet2 = new DatagramPacket(data2, data2.length);
        //2.接收服務器響應的數據
        socket.receive(packet2);
        //3.讀取數據
        String reply = new String(data2, 0, packet2.getLength());
        System.out.println("我是客戶端,服務器說: " + reply);
        //4.關閉資源
        socket.close();
    }
}

 

注意:必須首先啟動服務器,再啟動客戶端

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM