<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # UDP UDP是一種面向無連接的協議,因此,在通信時發送端和接收端不用建立連接。 UDP通信的過程就像是貨運公司在兩個碼頭間發送貨物一樣。在碼頭發送和接收貨物時都需要使用集裝箱來裝載貨物,UDP通信也是一樣,發送和接收的數據也需要使用“集裝箱”進行打包, 為此JDK中提供了一個DatagramPacket類,該類的實例對象就相當于一個集裝箱,用于封裝UDP通信中發送或者接收的數據。 ## DatagramPacket **接收方** ~~~ 構造DatagramPacket,用來接收長度為length的數據包 DatagramPacket(byte[] buf, int length) ~~~ **發送方** ~~~ 構造數據報包,用來將長度為length的包發送到指定主機上的指定端口號 DatagramPacket(byte[] buf, int length, InetAddress address, int port) ~~~ 使用該構造方法在創建DatagramPacket對象時,不僅指定了封裝數據的字節數組和數據的大小,還指定了數據包的目標IP地址(addr)和端口號(port)。該對象通常用于發送端,因為在發送數據時必須指定接收端的IP地址和端口號,就好像發送貨物的集裝箱上面必須標明接收人的地址一樣。 ### 常用方法 ~~~ 返回某臺機器的IP地址,此數據報將要發往該機器或是從該機器接收到 InetAddress getAdress() 返回某臺遠程主機的端口號,此數據報將要發往該主機或者是從該主機接收到 int getPort() 返回數據緩沖區 byte[] getData() 返回將要發送或接收到的數據長度 int getLength() ~~~ ## DatagramSocket DatagramPacket數據包的作用就如同是“集裝箱”,可以將發送端或者接收端的數據封裝起來。 然而運輸貨物只有“集裝箱”是不夠的,還需要有碼頭。 在程序中需要實現通信只有DatagramPacket數據包也同樣不行,為此JDK中提供的一個DatagramSocket類。 DatagramSocket類的作用就類似于碼頭,使用這個類的實例對象就可以發送和接收DatagramPacket數據包,發送數據的過程如下圖所示。 ![](https://box.kancloud.cn/246b17f965be687cb4de4a82865a55bf_803x339.png) 在創建發送端和接收端的DatagramSocket對象時,使用的構造方法也有所不同 ### 常用方法 構造方法 ![](https://box.kancloud.cn/3bef2602034c788e82afbcfb9e96c72c_919x323.png) 方法 ~~~ 從此套接字接收數據報包 void receive(DatagramPacket p) 從此套接字發送數據報包 void send(DatagramPacket p) ~~~ ## UDP網絡程序(聊天室) **接收端** ~~~ //創建數據包傳輸對象,并綁定端口6000 DatagramSocket datagramSocket = new DatagramSocket(6000); //創建字節數組 byte[] data = new byte[1024]; while (true) { //創建數據包對象,傳遞字節數組 DatagramPacket datagramPacket = new DatagramPacket(data, data.length); //調用datagramSocket對象方法receive傳遞數據包 datagramSocket.receive(datagramPacket); //獲取發送端的ip地址對象和端口 String ip = datagramPacket.getAddress().getHostAddress(); int port = datagramPacket.getPort(); int length = datagramPacket.getLength(); System.out.println(new String(data,0,length)+"..."+ip+":"+port); } //datagramSocket.close(); ~~~ **發送端** ~~~ Scanner sc = new Scanner(System.in); //創建DatagramSocket對象,數據包的發送和接收對象 DatagramSocket datagramSocket = new DatagramSocket(); //創建InetAddress對象,封裝自己的ip地址 InetAddress inetAddress = InetAddress.getByName("127.0.0.1"); while (true) { String message = sc.nextLine(); byte[] date = message.getBytes(); DatagramPacket datagramPacket = new DatagramPacket(date, date.length, inetAddress, 6000); //發送數據包 datagramSocket.send(datagramPacket); } //關閉資源 //datagramSocket.close(); ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看