基于UDP协议的简单Socket通信实例(JAVA)

服务器端收发代码:

public static void main(String[] args) throws IOException {
        /*
         * 接收客户端发送的数据
         */
        // 1.创建服务器端DatagramSocket,指定端口 默认本地ip地址
        DatagramSocket socket = new DatagramSocket(12345);
        // 2.创建数据报,用于接收客户端发送的数据
        byte[] data = new byte[1024];// 创建字节数组,指定接收的数据包的大小
        DatagramPacket packet = new DatagramPacket(data, data.length);
        // 3.接收客户端发送的数据
        System.out.println("****服务器端已经启动,等待客户端发送数据");
        socket.receive(packet);// 此方法在接收到数据报之前会一直阻塞
        //*************此方法在接收到数据报之前会一直阻塞*************************
        // 4.读取数据
        String info = new String(data, 0, packet.getLength());
        System.out.println("我是服务器,客户端说:" + info);

        /*
         * 服务器向客户端响应数据
         */
        // 1.定义客户端的地址、端口号、数据
        InetAddress ip = packet.getAddress();//获取数据来源ip地址
        int port = packet.getPort();//获取数据来源端口
        byte[] data2 = "服务器测试数据".getBytes();
        // 2.创建数据报,包含响应的数据信息
        DatagramPacket packet2 = new DatagramPacket(data2, data2.length, ip, port);
        // 3.响应客户端
        socket.send(packet2);
        // 4.关闭资源
        socket.close();
    }

控制台输出:

****服务器端已经启动,等待客户端发送数据
我是服务器,客户端说:客户端测试数据

Process finished with exit code 0

2、客户端收发代码:

public static void main(String[] args) throws IOException {
        InetAddress ip = InetAddress.getLocalHost(); //获取本地的ip地址
        int port = 12345;
//        InetAddress ip = InetAddress.getByName(); //在给定主机名的情况下确定主机的IP地址.如果参数为null,获得的是本机的IP地址
        byte[] data = "客户端测试数据".getBytes();
        // 2.创建数据报,包含发送的数据信息
        DatagramPacket packet = new DatagramPacket(data, data.length, ip, port);
        // 3.创建DatagramSocket对象
        DatagramSocket socket = new DatagramSocket();
        // 4.向服务器端发送数据报
        socket.send(packet);
        //*****************开始向服务器发送数据,等待向应中*********************

        /*
         * 接收服务器端响应的数据
         */
        // 1.创建数据报,用于接收服务器端响应的数据
        byte[] data2 = new byte[1024];
        DatagramPacket packet2 = new DatagramPacket(data2, data2.length);
        // 2.接收服务器响应的数据
        socket.receive(packet2);
        // 3.读取数据
        String reply = new String(data2, 0, packet2.getLength());
        System.out.println("我是客户端,服务器说:" + reply);
        // 4.关闭资源
        socket.close();
    }

控制台输出:


我是客户端,服务器说:服务器测试数据

Process finished with exit code 0

什么是Socket?

  • Socket就是为网络服务提供的一种机制。
  • 通讯的两端都有Sokcet
  • 网络通讯其实就是Sokcet间的通讯
  • 数据在两个Sokcet间通过IO传输。
  • TCP与UDP在概念上的区别:

TCP与UDP在概念上的区别:

UDP: a、是面向无连接, 将数据及源的封装成数据包中,不需要建立连接

          b、每个数据报的大小在限制64k内

          c、因无连接,是不可靠协议

          d、不需要建立连接,速度快

TCP: a、建议连接,形成传输数据的通道.

          b、在连接中进行大数据量传输,以字节流方式

          c 通过三次握手完成连接,是可靠协议

          d 必须建立连接m效率会稍低

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值