天天看點

Java 實作基于UDP的使用者登入

用戶端:

package JavaLearn.UDP;

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

/**
 * Created by ChenHe on 2017/2/21.
 * 用戶端
 */

public class UdpClient {
   public static void main(String[] atrs) throws IOException {
      /**
       * 向服務端發送資料
       * **/

       //1.定義伺服器的位址,端口号,資料
       InetAddress address = InetAddress.getByName("localhost");
       int port = 8800;
       byte[] data = "使用者名:admin;密碼:123".getBytes();
       //2.建立資料報,包含發送的資訊
       DatagramPacket packet = new DatagramPacket(data,data.length,address,port);
       //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();
   }
}
      

服務端:

package JavaLearn.UDP;

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

/**
 * Created by ChenHe on 2017/2/21.
 * 伺服器端,實作基于UDP的使用者登入
 */

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);
        //3.接收用戶端發送的資料
        System.out.println("******伺服器端已經啟動,等待用戶端連入******");
        socket.receive(packet);//此方法在接收到資料報之前會一直阻塞
        //4.讀取資料
        String info = new String(data,0,packet.getLength());
        System.out.println("我是伺服器,用戶端說:"+info);

        /**
         * 服務端響應用戶端
         * **/
        //1.定義用戶端位址,端口号,資料
        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);
        //4.關閉socket
        socket.close();
    }
}