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

posted @ 2015-07-20 16:11  cuiz_book  阅读(10060)  评论(0编辑  收藏  举报