JAVA之UDP网络通讯

 UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。
 在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点:
 也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。
 采用UDP协议要先把数据定义成数据报(Datagram)并在数据报中指明数据所要达到的Socket,再进行数据传递。主要涉及的两个类:
  • DatagramPacket:数据报包类
  • DatagramSocket:数据端对端通讯类
    简单demo之UDP服务端:
public class UdpServer {

    public static void main(String[] args) {
        // 实现步骤1:创建DatagramSokcet
        try {
            DatagramSocket mSocket = new DatagramSocket(9999);
            // 实现步骤2:创建DatagramPacket
            byte[] data = new byte[1024];
            DatagramPacket mPacket = new DatagramPacket(data, data.length);
            // 实现步骤3:接收 数据
            mSocket.receive(mPacket);
            // 实现步骤4:处理数据
            String result = new String(data, 0, mPacket.getLength());
            System.out.println(result);
            /**** 回复客户端 ****************/
            byte[] response = "我是UDP服务端,已经回到你的请求".getBytes();
            mPacket.setData(response);
            mSocket.send(mPacket);
            mSocket.close();
        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

简单demo之UDP客户端:

public class UdpClient {
    private static String sendData = "我是UDP客户端,请求连接服务端";
    public static void main(String[] args) {

        try {
            // 步骤1:指定服务器的信息
            InetAddress mAddress = InetAddress.getByName("localhost");
            int port = 9999;
            byte[] data = sendData.getBytes();
            // 步骤2:创建DatagramPacket
            DatagramPacket mPacket = new DatagramPacket(data, data.length,
                    mAddress, port);
            // 步骤3:创建DatagramSocket
            DatagramSocket mSocket = new DatagramSocket();
            // 步骤4:向服务端发送数据
            mSocket.send(mPacket);
            /***** 下面接收服务器返回数据 ***************************/
            // 实现步骤3:接收 数据
            mSocket.receive(mPacket);
            // 实现步骤4:处理数据
            String response = new String(data, 0, mPacket.getLength());
            System.out.println(response);
            // 关闭资源
            mSocket.close();
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值