Java中基于Socket的UDP编程

UDP编程

     1)不需要建立连接通道
     2)数据大小有限制

     3)不可靠连接---->传输速度快!


用到的类和类中方法

Socket类

此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。 (套接字当作手机理解)

DatagramSocket类

此类表示用来发送和接收数据报包的套接字。

构造方法:

public DatagramSocket(int port,InetAddress laddr) throws SocketException
创建数据报套接字,将其绑定到指定的本地地址。
port - 要使用的本地端口
laddr - 要绑定的本地地址

public DatagramSocket() throws SocketException
构造数据报套接字并将其绑定到本地主机上任何可用的端口。套接字将被绑定到通配符地址,IP 地址由内核来选择。

public DatagramSocket(int port) throws SocketException
创建数据报套接字并将其绑定到本地主机上的指定端口。

发送方法

public void send(DatagramPacket p)throws IOException
从此套接字发送数据报包。
p - 将要发送的 DatagramPacket。

接收方法:

public void receive(DatagramPacket p)throws IOException
从此套接字接收数据报包。
p - 要放置传入数据的 DatagramPacket。

关闭方法:

public void close()
关闭此数据报套接字。

DatagramPacket类

此类表示数据报包。

构造方法

public DatagramPacket(byte[] buf,int offset,int length,InetAddress address,int port)
构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。length 参数必须小于等于 buf.length。
buf - 包数据。
offset - 包数据偏移量。
length - 包数据长度。
address - 目的地址。
port - 目的端口号。

public DatagramPacket(byte[] buf,int length)
构造 DatagramPacket,用来接收长度为 length 的数据包。 length 参数必须小于等于 buf.length。
buf - 保存传入数据报的缓冲区。
len - 要读取的字节数。

常用方法:

public InetAddress getAddress()
返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的

public byte[] getData()
返回数据缓冲区。接收到的或将要发送的数据从缓冲区中的偏移量 offset 处开始,持续 length 长度。

public int getLength()
返回将要发送或接收到的数据的长度。

发送端的开发步骤:

       1)创建发送端的Socket对象
      2)创建数据,并打包
      3)调用当前发送端Socket对象中的发送的方法
      4)关闭资源


public static void main(String[] args) throws IOException {
        ///1)创建发送端的Socket对象
        //构造数据报套接字并将其绑定到本地主机上任何可用的端口
        DatagramSocket ds = new DatagramSocket() ;
        
          //2)创建数据,并打包
        //DatagramPacket 数据报包
        //有数据
        byte[] bys = "hello,udp,我来了".getBytes() ;
        //获取包数据长度
        int len = bys.length ;
        //获取ip地址对象
        InetAddress address = InetAddress.getByName("192.168.10.1") ;
        //指定端口号
        int port = 10086 ;
        DatagramPacket dp =new DatagramPacket(bys, 0, len, address, port) ;
          //3)调用当前发送端Socket对象中的发送的方法
        ds.send(dp);
          //4)关闭资源
        ds.close();
}

Udp编程的接收端 开发步骤:

     1)创建Socket对象
     2)创建一个数据报包(接收容器)
     3)调用Socket对象中的接收的方法
     4)解析实际传递的数据
    5)将解析的数据(ip,数据)展示在控制台上
     6)关闭资源


public static void main(String[] args) throws IOException {        
        //1)创建Socket对象
        DatagramSocket ds = new DatagramSocket(10086);//创建数据报套接字并将其绑定到本地主机上的指定端口。        
        //2)创建一个数据报包(接收容器)
        byte[] bys = new byte[1024] ;
        int len = bys.length ;
        DatagramPacket dp = new DatagramPacket(bys, len) ;        
        //3)调用Socket对象中的接收的方法
        ds.receive(dp);//阻塞式方法                
        InetAddress address = dp.getAddress() ;
        String ip = address.getHostAddress() ; //获取ip地址文本形式
        //4)解析实际传递的数据        
        byte[] bys2  = dp.getData() ; //获取缓冲中实际数据(从接收容器中获取)
        int len2 = dp.getLength() ;//从接收容器中获取包的实际长度        
        String data = new String(bys2, 0, len2) ;        
        System.out.println("当前接收到的数据是:"+data+",来自于"+ip);        
        //6)关闭资源
        ds.close();

}
先运行接收端,在运行发送端

注意:

多次运行接收端会报异常:java.net.BindException: Address already in use: Cannot bind

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值