UDP網路編程

來源:互聯網
上載者:User

標籤:http   java   資料   os   問題   工作   

 




IP地址和連接埠
IP地址:是電腦在網路中的唯一標示,我們在進行網路編程時一定要定位到遠端電腦,而IP地址就是解決這個問題的。
連接埠:除了電腦外我們還要定位到具體的應用程式進程,而連接埠就是給應用程式分配的身份標示。
UDP和TCP
UDP:1,每個資料報中都給出了完整的地址資訊,因此無需要建立發送方和接收方的串連。
           2,UDP傳輸資料時是有大小限制的,每個被傳輸的資料報必須限定在64kB之內。
            3,UDP是一個不可靠的協議,發送方所發送的資料報並不一定以相同的次序到達接收方。
TCP:1,連線導向的協議,在socket之間進行資料轉送之前必須要建立串連,是通過三向交握來建立串連的,所以在TCP中需要串連時                    間。
            2,TCP傳輸資料大小限制,一旦串連建立起來,雙方的socket就可以按統一的格式傳輸大的資料。
            3,TCP是一個可靠的協議,它確保接收方完全正確的擷取發送方所發送的全部資料。
資料框架格式

Socket
簡單理解下,Socket就是一個應用程式編程的機制和一種介面,可以理解為是應用程式建立的一個港口碼頭,應用程式只要把裝著貨物的集裝箱(在程式中就是要通過網路發送的資料)放到港口碼頭上,就算完成了貨物的運送,剩下來的工作就由貨運公司去處理了(在電腦中由驅動程式來充當貨運公司)。如果把DatagramSocket比喻為建立的港口碼頭,那麼DatagramPacket就是我們發送和接收資料的集裝箱。
關於InetAddress類
java中的InetAddress 類是一個代表IP地址的封裝。IP地址可以由位元組數組和字串來分別表示,InetAddress將IP地址以對象的形式進行封裝,可以更方便的操作和擷取其屬性。InetAddress沒有構造方法,可以通過兩個靜態方法獲得它的對象。
public class IPDemo {

    /**
     * @param args
     * @throws UnknownHostException
     */
    public static void main(String[] args) throws UnknownHostException {

        //擷取本地主機ip對象。
//        InetAddress ip = InetAddress.getLocalHost();
        InetAddress ip = InetAddress.getByName("192.168.1.252");
       
        //擷取ip對象中的ip地址字串。或者ip地址對應的主機名稱。
        System.out.println(ip.getHostAddress());
        System.out.println(ip.getHostName());
    }

}

UDP編程
接收端
 public class UDPRece {

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {

        /*
         * udp的接收端:
         * 思路:
         * 1,建立udpsocket服務。
         * 2,接收資料並儲存到資料包中,儲存到資料包中的目的是為瞭解析接收到的資料。
         * 3,將解析到的資料列印到顯示器。
         * 4,關閉服務。
         */
        System.out.println("udp 接收端開啟");
        //1,建立udp的socket服務。用於接收端,一定要指定連接埠,因為必須要明確從哪個連接埠來的資料是這個應用程式所能解析的。
        //簡單說:接收端必須監聽一個連接埠。
        DatagramSocket  ds = new DatagramSocket(10000);
        
    
        //2,接收資料到資料包中。
        byte[] buf = new byte[1024];
        DatagramPacket dp = new DatagramPacket(buf,buf.length);
        
        ds.receive(dp);
        
        //3,解析資料包中的具體資料。
        String ip = dp.getAddress().getHostAddress();
        int port = dp.getPort();
        String text = new String(dp.getData(),0,dp.getLength());
        System.out.println(ip+":::"+port+":::::"+text);
        
        //4,關閉資源。
        ds.close();
        System.out.println("udp 接收端關閉");
    }

}
發送端
public class UDPSend {

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {

        /*
         * 通過udp協議建立一個發送端。
         * 思路:
         * 1,應該有可以通過該協議傳輸資料的對象。先有udp服務。
         * 2,有資料,並將資料封裝到資料包,並在包上明確目的地址。
         * 3,通過udp服務將這個資料包發出去。
         * 4,關閉資源。
         */
        System.out.println("udp 發送端開啟");
        //1,建立udp socket服務.
        DatagramSocket ds = new DatagramSocket(8888);       
       
        //2,明確資料,並將資料封裝到資料包中。
        String str = "udp示範,哥們來了";
        byte[] buf = str.getBytes();
        DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.252"),10000);
       
        //3,將資料包通過socket服務發送。
        ds.send(dp);
       
        //4,關閉資源。
        ds.close();
        System.out.println("udp 發送端關閉");
       
    }

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.