使用DatagramSocket发送、接收数据(2)

下面程序使用DatagramSocket实现了Server/Client结构的网络通信。本程序的服务器端使用循环1000次来读取DatagramSocket中的数据报,每当读取到内容之后便向该数据报的发送者送回一条信息。服务器端程序代码如下。

程序清单:codes\17\17.4\UdpServer.java

 
    public class UdpServer
    {
        public static final int PORT = 30000;
    // 定义每个数据报的最大大小为4KB
        private static final int DATA_LEN = 4096;
    // 定义接收网络数据的字节数组
        byte[] inBuff = new byte[DATA_LEN];
    // 以指定字节数组创建准备接收数据的DatagramPacket对象
        private DatagramPacket inPacket =
        new DatagramPacket(inBuff , inBuff.length);
    // 定义一个用于发送的DatagramPacket对象
        private DatagramPacket outPacket;
    // 定义一个字符串数组,服务器端发送该数组的元素
        String[] books = new String[]
            {
            "疯狂Java讲义",
            "轻量级Java EE企业应用实战",
            "疯狂Android讲义",
            "疯狂Ajax讲义"
            };
        public void init()throws IOException
        {
            try(
    // 创建DatagramSocket对象
            DatagramSocket socket = new DatagramSocket(PORT))
            {
    // 采用循环接收数据
                for (int i = 0; i < 1000 ; i++ )
                {
    // 读取Socket中的数据,读到的数据放入inPacket封装的数组里
                    socket.receive(inPacket);
    // 判断inPacket.getData()和inBuff是否是同一个数组
                    System.out.println(inBuff == inPacket.getData());
    // 将接收到的内容转换成字符串后输出
                    System.out.println(new String(inBuff, 0 , inPacket.getLength()));
    // 从字符串数组中取出一个元素作为发送数据
                    byte[] sendData = books[i % 4].getBytes();
    // 以指定的字节数组作为发送数据,以刚接收到的DatagramPacket的
    // 源SocketAddress作为目标SocketAddress创建DatagramPacket
                    outPacket = new DatagramPacket(sendData, sendData.length , inPacket.getSocketAddress());
    // 发送数据
                    socket.send(outPacket);
                  }
            }
        }
        public static void main(String[] args)
        throws IOException
        {
            new UdpServer().init();
        }
    } 

上面程序中的粗体字代码就是使用DatagramSocket发送、接收DatagramPacket的关键代码,该程序可以接收1000个客户端发送过来的数据。

客户端程序代码也与此类似,客户端采用循环不断地读取用户键盘输入,每当读取到用户输入的内容后就将该内容封装成DatagramPacket数据报,再将该数据报发送出去;接着把DatagramSocket中的数据读入接收用的DatagramPacket中(实际上是读入该DatagramPacket所封装的字节数组中)。客户端程序代码如下。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中使用DatagramSocket类来发送接收UDP数据包。DatagramSocket类是Java提供的用于实现UDP协议的套接字类。 要发送UDP数据包,可以按照以下步骤进行操作: 1. 创建一个DatagramSocket对象,可以指定端口号或者让系统自动分配一个可用的端口号。 2. 创建一个DatagramPacket对象,指定要发送数据、目标主机的IP地址和端口号。 3. 调用DatagramSocket的send()方法,将数据发送到目标主机。 要接收UDP数据包,可以按照以下步骤进行操作: 1. 创建一个DatagramSocket对象,可以指定端口号或者让系统自动分配一个可用的端口号。 2. 创建一个字节数组,用于存储接收到的数据。 3. 创建一个DatagramPacket对象,指定接收数据的字节数组和数组长度。 4. 调用DatagramSocket的receive()方法,接收来自其他主机发送数据包。 以下是一个简单的示例代码: // 发送UDP数据DatagramSocket socket = new DatagramSocket(); String message = "Hello, UDP!"; InetAddress address = InetAddress.getByName("目标主机IP地址"); int port = 12345; byte[] sendData = message.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, address, port); socket.send(sendPacket); // 接收UDP数据包 byte[] receiveData = new byte[1024]; DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); socket.receive(receivePacket); String receivedMessage = new String(receivePacket.getData(), 0, receivePacket.getLength()); System.out.println("Received message: " + receivedMessage);

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值