1. 程式人生 > >Java UDP的簡單實例以及知識點簡述

Java UDP的簡單實例以及知識點簡述

iis t對象 otn art utl zll ptp pxc server

UDP的實現

  Java中實現UDP協議的兩個類,分別是DatagramPacket數據包類以及DatagramSocket套接字類

  其與TCP協議實現不同的是:

  UDP的套接字DatagramSocket相比於Socket、ServerSocket來說,是一個非常簡單的概念,沒有連接的含義。套接字只需要知道偵聽和發送數據包的本地端口即可

  也就是在TCP協議中庸Socket類和ServerSocket類進行功能劃分,UDP協議中只用一個數據包套接字DatagramSocket發送和接受數據即可。

  發送和接收數據、地址和端口都封裝在數據包類DatagramPacket中。


DatagramPacket類

  構造函數:

public DatagramPacket(byte[] buf,int length);
/*offset為buf緩沖區的偏移量*/
public DatagramPacket(byte[] buf,int offset,int length);
/*address表示目的地址    port表示目的端口*/
public DatagramPacket(byte[] buf,int offset,int length,InetAdress address, int port)

 常用方法:

/*返回接受數據包的主機IP地址,通常用於獲取接受到數據包的發送主機IP
*/ public InetAdress getAdress(); /*返回數據包的主機端口號*/ public int getPort(); /*返回被接收或發送的緩沖區數據*/ public byte[] getData(); /*設置返回發出數據包的主機IP地址*/ public void setAdress(InetAdress iaddr); /*設置要將此數據包發往遠程主機上的端口號*/ public void setPort(int iport);

DatagramSocket類

  對於數據包套接字DatagramSocket來說,它只是發送或接收數據包的端口,不需要考慮鏈接。因此在客戶端和服務器端都需要建立一個DatagramSocket對象,然後通過receive()方法接受數據包,通過send()方法發送數據包。


端口相關對照

技術分享


UDP網絡應用實例

客戶端發送1-26數字給服務器端;

服務器端返回對應的A-Z給客戶端。

客戶端程序:

package web;

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

public class UDPCilent {
    public static void main(String[] args) {
        try {
            /*UDP Cilent SEND*/
            DatagramSocket socket=new DatagramSocket();
            System.out.println("UDP Cilent Start...");
            System.out.println("Enter 1 to 26 ,Server Will Return U A to Z:");
            String info=new Scanner(System.in).next();
            socket.send(new DatagramPacket(info.getBytes(), info.length(),InetAddress.getByName("127.0.0.1"),3000));
            System.out.println("UDP Cilent Send Message...");
            
            
            byte[] rec=new byte[1024];
            DatagramPacket recivepacket=new DatagramPacket(rec, rec.length);
            socket.receive(recivepacket);
            System.out.println("Receive");
            
            String reciveData=new String(recivepacket.getData(),0,recivepacket.getLength());
            System.out.println("Receive from"+recivepacket.getAddress().getHostAddress()+":"+reciveData);
            
            
            socket.close();
            System.out.println("UDP Cilent close...");
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
}

服務端程序

package web;

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

public class UDPServer {
    
    public static void main(String[] args) {
        try {
            
            /*UDP Receive Message*/
            DatagramSocket socket=new DatagramSocket(3000);
            byte []bf=new byte[1024];
            DatagramPacket packet=new DatagramPacket(bf, 1024);
            System.out.println("UDP Server Start... Wait to Receive Message...");
            
            socket.receive(packet);
            String info=new String(packet.getData(),0,packet.getLength())+"from"+packet.getAddress().getHostAddress()+":"+packet.getPort();
            System.out.println(info);
            
            /*feedback*/
            InetAddress address= packet.getAddress();
            int port=packet.getPort();
            String str=new String(packet.getData(),0,packet.getLength());
            int renum=Integer.parseInt(str);
            int feedback=‘A‘;
            for(int i=1;i<=26;i++)
            {
                if(renum==i){
                    feedback=feedback+(i-1);
                }
            }
            char back=(char) feedback;
            String fbString=back+"";
            byte[] fstr=fbString.getBytes();
            DatagramPacket feed= new DatagramPacket(fstr,fstr.length,address,port);
            
            socket.send(feed);
            socket.close();
            System.out.println("UDP Server close...");
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
    
}

Java UDP的簡單實例以及知識點簡述