黑马程序员--UDP通信

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

1. DatagramPacket

1). 创建接收包

DatagramPacket:UDP数据报基于IP建立的,每台主机有65536个端口号可以使用。数据报中字节数限制为65536-8 。包含8字节的头信息。
构造接收包:
DatagramPacket(byte[] buf, int length)
将数据包中Length长的数据装进Buf数组。
DatagramPacket(byte[] buf, int offset, int length)
将数据包中从Offset开始、Length长的数据装进Buf数组。

2). 创建发送包

构造发送包:
DatagramPacket(byte[] buf, int length, InetAddress clientAddress, int clientPort)
从Buf数组中,取出Length长的数据创建数据包对象,目标是clientAddress地址,clientPort端口,通常用来发送数据给客户端。
DatagramPacket(byte[] buf, int offset, int length, InetAddress clientAddress, int clientPort)
从Buf数组中,取出Offset开始的、Length长的数据创建数据包对象,目标是clientAddress地址,clientPort端口,通常用来发送数据给客户端。

2. DatagramSocket

1). 服务端接收

DatagramSocke用于接收和发送UDP的Socket实例 。
DatagramSocket(int port)
创建实例,并固定监听Port端口的报文。通常用于服务端。
其中方法:
receive(DatagramPacket d)
接收数据报文到d中。receive方法产生 “阻塞”。会一直等待知道有数据被读取到。

2). 客户端发送

无参的构造方法DatagramSocket()通常用于客户端编程,它并没有特定监听的端口,仅仅使用一个临时的。程序会让操作系统分配一个可用的端口。
其中方法:
send(DatagramPacket dp)
该方法用于发送报文dp到目的地。
代码如下:

  /**
     *  Server端程序
     */
    public class Server {
    public static void main(String[] args) {
        DatagramSocket socket = null;
        try {
            socket = new DatagramSocket(8088);//申请8088端口
            byte[] data = new byte[1024];
            DatagramPacket packet
                = new DatagramPacket(data, data.length);//创建接收包
            socket.receive(packet);//会产生阻塞,读取发送过来的数据
            String str = new String(packet.getData(),0,packet.getLength());//从包中取数据
            System.out.println(str);

        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            if(socket != null){
                socket.close();//关闭释放资源
            }
        }
    }
}
/**
 *  Client端程序
 */
public class Client {
    public static void main(String[] args) {
        DatagramSocket socket = null;
        try {
            socket = new DatagramSocket();//创建Socket
            byte[] data = "你好服务器!".getBytes();
            DatagramPacket packet = new DatagramPacket(
                                        data, 
                                        data.length,
                                        InetAddress.getByName("localhost"),
                                        8088
                                    );//创建发送包
            socket.send(packet);//发送数据


        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            if(socket != null){
                socket.close();//关闭以释放资源
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值