1. 程式人生 > >淺析Java網路程式設計UDP

淺析Java網路程式設計UDP

UDP協議是一種通訊標準,它以一種“無連線”的方式定義的傳輸方式,使用Udp協議可以提高資料的傳輸速度。以“無連線”方式提供的網路服務,雖然可能會由於“無固定的傳輸通道”而出現誤碼,但如果使用者更側重傳輸速度,並可以容忍一定的誤位元速率,那麼,其傳輸資料高效性將成為一個很大的優勢。以上是UDP傳輸的優點和缺點。

瞭解UDP之前,先了解一下什麼是資料報文?

所謂資料報文,是UDP協議裡傳輸資料的基本單元。

那麼UDP是如何傳輸資料的呢? 

根據UDP協議,源主機(即資訊傳送的主機)將會把通訊資料流(比如字串)拆分成若干個長度固定的資料單位,並在其中封裝好目的地址、目標埠等資訊。這些長度一致的包含目標地址、目標埠等資訊的資料單位就叫“資料報文”。UDP協議是根據報文裡的目標地址等資訊直接傳送,而不像TCP協議,先要建立通訊通道。

在Java裡的DatagramSocket物件裡,抽象出了採用UDP協議傳輸資料的一般方法,而DatagramSocket物件則封裝“資料報文”和“資料報文頭”等屬性。

UDP通訊簡易流程:

客戶端->建立DatagramSocket->把通訊資料打包,封裝目標主機等資訊->呼叫send,傳送資料->結束通訊

服務端->建立DatagramSocket->通過receive監聽埠->開啟資料報文->提供服務->返回服務結果->結束通訊


首先我們建立一個簡單客戶端:

1:建立UDPSocket服務

2:提供資料,並封裝

3:通過Socket傳送功能,傳送出去

4:關閉資源


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

/**
 * Created by Administrator on 2016/11/18.
 */
//服務端
public class Udpreve {
    public static void main(String[] args) throws  Exception {
        //1.建立Udp服務
        DatagramSocket dss = new DatagramSocket(10000);
        //2.建立接受資料包的一個空資料包
        byte[] buf = new byte[1024];
        DatagramPacket dpp = new DatagramPacket(buf, buf.length);
        //3.接受資料包
        dss.receive(dpp);//阻塞式方法
        //4.解析資料包
        String ip = dpp.getAddress().getHostAddress();
        String st = new String(dpp.getData(), 0, dpp.getLength());
        int port = dpp.getPort();
        System.out.println("IP地址:" + ip + "--------" + "資料:" + st + "------" + "埠號:" + port);
        //5.關閉通訊
        dss.close();
    }
}

建立簡單的服務端:

1::定義UDPSocket服務
2:定義一個數據包,用來儲存接收到的位元組資料。(為什麼用資料包接收,因為資料包提供了更多功能,能夠提取不同資訊)
3:通過Socket服務的receive接收收據並放入已經定義好的資料包中
4:通過資料包功能,解析資料。
5:關閉通訊


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * Created by Administrator on 2016/11/18.
 */
//UDP客戶端
public class Udpsend {
    public static void main(String[] args) throws Exception{
        //1.建立Udp Socaket服務
        DatagramSocket ds=new DatagramSocket();
        //2.提供資料,並封裝到資料包中
        BufferedReader buf= new BufferedReader(new InputStreamReader(System.in));
        String line= null;
        line=buf.readLine();
        byte[] b=line.getBytes();
        DatagramPacket dp = new DatagramPacket(b, b.length, InetAddress.getByName("172.24.8.247"), 10000);
        //3.通過Socket傳送功能,傳送出去
        ds.send(dp);
        //4.關閉資源
        ds.close();
    }
}
這樣一個簡單的C/S通訊就寫好了,執行結果如圖:


切記一定要先開啟服務端,用來監聽埠,然後在開啟客戶端輸入資料,進行通訊。


下面這個是在這個簡單的程式碼上運用多執行緒來做的一個山寨版QQ,可以兩個人進行通訊。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * Created by Administrator on 2016/11/19.
 */
class send implements Runnable{
    DatagramSocket d;
    public send(DatagramSocket d){
        this.d=d;
    }
    public void run(){
        try {
            BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
            String line =null;
            while ((line = b.readLine()) != null) {
                byte[] by=line.getBytes();
                DatagramPacket dp=new DatagramPacket(by,by.length, InetAddress.getByName("169.254.172.244"),60000);
                d.send(dp);
            }
        }catch (Exception e){
            System.out.println(e);
        }
    }
}
class rec implements Runnable{
    DatagramSocket d2;
    public rec(DatagramSocket d2){
        this.d2=d2;
    }
    public void run(){
        try {
            byte[] bb = new byte[1024];
            DatagramPacket dd = new DatagramPacket(bb, bb.length);
            while (true) {
                d2.receive(dd);
                String ip= d2.getInetAddress().getHostAddress();
                String da =new String(dd.getData(),0,bb.length);
                int port= dd.getPort();
                System.out.println("ip"+ip+"port"+port+"------"+da);
            }
        }catch (Exception e){
            System.out.println(e);
        }
    }
}
public class chatDemo {
    public static void main(String[]args) throws Exception{
        DatagramSocket sendDemo=new DatagramSocket();
        DatagramSocket reDemo=new DatagramSocket(60001);
        Thread s1=new Thread(new send(sendDemo));
        Thread r1=new Thread(new rec(reDemo));
        s1.start();
        r1.start();
    }
}

相關推薦

淺析Java網路程式設計UDP

UDP協議是一種通訊標準,它以一種“無連線”的方式定義的傳輸方式,使用Udp協議可以提高資料的傳輸速度。以“無連線”方式提供的網路服務,雖然可能會由於“無固定的傳輸通道”而出現誤碼,但如果使用者更側重傳輸速度,並可以容忍一定的誤位元速率,那麼,其傳輸資料高效性將成為一個很大

JAVA 網路程式設計UDP TCP

UDP協議   UDP是無連線通訊協議,即在資料傳輸時,資料的傳送端和接收端不建立邏輯連線。簡單來說,當一臺計算機向另外一臺計算機發送資料時,傳送端不會確認接收端是否存在,就會發出資料,同樣接收端在收到資料時,也不會向傳送端反饋是否收到資料UDP的交換過程如下圖所示。 優

Java 網路程式設計 UDP協議

網路程式設計 TCP/IP協議:多臺計算機網路連線的規則 包括:TCP協議、IP協議、UDP協議和其它協議的協議組 層次結構: 鏈路層:鏈路層是用於定義物理傳輸通道,通常是對某些網路連線裝置的驅動協議,例如針對光纖、網線提供的驅動。硬體方面的 網路層:網路層是整個TCP/IP協議的核心,它主要用於將

Java網路程式設計UDP協議傳送接收資料

UDP協議傳送資料步驟 A:建立傳送端socket物件; B:建立資料,並把資料打包; C:呼叫socket物件的傳送方法傳送資料包; D:釋放資源 package net; import java.io.IOException; import java.net.Datagra

Java網路程式設計UDP通訊原理

前言 繼續今天我們的Java網路程式設計——TCP和UDP通訊 一、TCP和UDP概述 傳輸層通常以TCP和UDP協議來控制端點與端點的通訊  TCPUDP 協議名稱 傳輸控制協議 使用者資料包協議 是否連線 面向連線的協議。資料必須要建立連線 無連線的協議,每個資料報中都給出完整的地

Java網路程式設計2.UDP網路程式設計

UDP網路程式設計 1、UDP協議傳送資料 (1)UDP協議傳送資料的步驟: UDP協議傳送資料 A: 建立傳送端Socket物件 B: 建立資料,並把資料打包 C: 呼叫Socke

Java網路程式設計4.UDP網路程式設計之多執行緒優化

UDP網路程式設計之多執行緒優化——DatagramSocket類 1、UDP網路程式設計之多執行緒優化的思想 (1)一個執行緒實現客戶端——傳送資料 (2)一個執行緒實現伺服器端——接收資料

Java網路程式設計(2):TCP和UDP

1、多執行緒“服務端-客戶端”   TCP客戶端使用Socket來連線伺服器和與伺服器通訊。以下為在主執行緒中將使用者輸入傳送給服務端,在建立的執行緒中將服務端發回的資料輸出來: import java.net.*; import java.io.*; class Cl

Java網路程式設計UDP DatagramSocket

原文地址 DatagramSocket類是java通過UDP通訊的途徑。UDP仍位於IP層的上面。 你可以用DatagramSocket類傳送和接收UDP資料包。 UDP 和TCP UDP工作方式和TCP有點不同。當你通過TCP傳送資料時,你先要建立連線。一旦TCP連線建立了,TCP會保證你的

-1-7 java 網路程式設計基本知識點 計算機網路 TCP/IP協議棧 通訊必備 tcp udp

Socket和ServerSocket 建立客戶端和伺服器端 建立連線後,通過Socket中的IO流進行資料的傳輸 關閉socket 同樣,客戶端與伺服器端是兩個獨立的應用程式。

Java網路程式設計四 非阻塞通訊UDP

轉自 http://blog.csdn.net/alangdangjia/article/details/9065845 import java.io.BufferedReader;    import java.io.ByteArrayInputStream;  

黑馬程式設計師 【】java學習之路——網路程式設計 UDP 鍵盤錄入傳輸

import java.net.*; import java.io.*; class UdpRece2  {public static void main(String[] args) throws Exception{DatagramSocket ds = new DatagramSocket(10001)

java 網路程式設計(Socket) TCP/UDP 總結案例

網路程式設計:關注的是底層的資料傳輸 網頁程式設計:資料的展示 1、基本概念 一、網路:將不同的計算機連線在一起區域網 都會網路 網際網路 二、地址:Ip地址確定網路上的絕對的地址位置   房子的地址 三、埠號(相當於房門):區分計算機上的軟體 相當於房門兩個位元組

java網路程式設計:13、基於UDP的socket程式設計(三)實現相互發送接收訊息

宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!! 文章目錄 一、前言 二、基於UDP伺服器端程式的編寫 三、基於UDP客戶端程式的編寫 四、測試列印 五、系列文章(java網路程式設計) 通過上兩篇文章:1、瞭解了基於UDP

java網路程式設計:12、基於UDP的socket程式設計(二)程式碼通訊-簡單例項

宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!! 文章目錄 一、基於UDP伺服器端程式的編寫 二、基於UDP客戶端程式的編寫 三、系列文章(java網路程式設計) 通過上篇文章瞭解了基於UDP通訊的理論、基本步驟以及它跟TCP的區別

java網路程式設計:11、基於UDP的socket程式設計(一)理論、基本步驟

宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!! 文章目錄 一、基於UDP的socket程式設計 二、基本步驟 三、系列文章(java網路程式設計) 一、基於UDP的socket程式設計 對於基於UDP通訊來說,通訊雙方不需要建

JAVA網路程式設計UDP入門篇)

網路程式設計:通過計算機語言實現資源的共享 網路程式設計模型資料一層層的封裝打包 應用層:eg:應用程式,qq 表示層: 會話層: 傳輸層: 網路層:資料傳輸 資料鏈路層:資料幀,使用交換機傳遞資料 物理層 : 將資料轉化為1,0資料 應用程式:網路程式設計+IO

Java網路程式設計與NIO詳解4:淺析NIO包中的Buffer、Channel 和 Selector

Java NIO:Buffer、Channel 和 Selector轉自https://www.javadoop.com/post/nio-and-aio本文將介紹 Java NIO 中三大元件 Buffer、Channel、Selector 的使用。本來要一起介紹非阻塞 I

Java網路程式設計UDP通訊

網路通訊的方式除了TCP方式以外,還有一種實現的方式就是UDP方式。UDP(User Datagram Protocol),中文意思是使用者資料報協議,方式類似於發簡訊息,是一種物美價廉的通訊方式,使用該種方式無需建立專用的虛擬連線,由於無需建立專用的連線,所以對於伺服

java 網路程式設計UDP

網路程式設計(UDP傳輸)*1.傳送Send* 建立DatagramSocket, 隨機埠號* 建立DatagramPacket, 指定資料, 長度, 地址, 埠* 使用DatagramSocket傳送DatagramPacket* 關閉DatagramSocket* 2.接