Java基礎—socket編程—UDP發送及接收


簡介:在同一主機上測試,同一IP地址,不同的端口,使用UDP發收數據

使用socket編程,通過UDP協議發送數據

需求:使用UDP協議向某IP的某端口發送一條數據

UdpSend.java

package com.Train;

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

//udp傳輸:
/**步驟:---
 * 1、建立udp socket 接收和發送點
 * 2、提供數據,打包
 * 3、使用send發送
 * 4、關閉資源
 * */

public class UdpSend {

    public static void main(String[] args) throws SocketException, UnknownHostException {
        /** 1、建立udp socket端點 */
        
        DatagramSocket s = new DatagramSocket();
        
        /** 2、提供數據,封裝打包  ---DatagramPacket(byte[] buf, int length, InetAddress address, int port)  */
        
        byte[] bs = "正在使用UDP發送--我是數據! ".getBytes(); 
        DatagramPacket dp = new DatagramPacket(bs, bs.length, InetAddress.getByName("192.168.1.189"), 8070);

        /** 3、使用send發送 */
        try {
            s.send(dp);
        } catch (IOException e) {
            System.out.println("發送失敗: ");
            e.printStackTrace();
        }
        
        /** 4、關閉資源 */
        s.close();
        
    }

}

運行以上Java程序:

在網絡數據收發工具中獲取到數據:

image

 

使用socket編程,通過UDP協議接收數據

UdpRecv.java

package com.Train;

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

//udp傳輸: 接收
/**步驟:---
* 1、建立udp socket,設置接收端口
* 2、預先創建數據存放的位置,封裝
* 3、使用receive阻塞式接收
* 4、關閉資源
* */
public class UdpRecv {

    public static void main(String[] args) throws Exception{
        /**1、建立udp socket,設置接收端口*/
        
        DatagramSocket ds = new DatagramSocket(3020);

        /**2、預先創建數據存放的位置,封裝*/
        byte [] bbuf = new byte [1024];
         DatagramPacket dp = new DatagramPacket(bbuf,bbuf.length);
         
         /**3、使用receive阻塞式接收*/
         ds.receive(dp);
          
         System.out.println("ip::"+dp.getAddress().getHostAddress()+"\nport::"+dp.getPort()+"\ndata::"+new String(dp.getData()));
         
         /**4、關閉資源*/
         ds.close();
    }

}

測試步驟:

1、運行UdpRecv.java程序后,觀察console的輸出:無

2、使用網絡收發工具,通過UDP協議向3020端口發送數據,點擊send:

image

3、eclipse<console>:

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM