加入收藏 | 设为首页
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Java网络编程之UDP程序设计

Posted on 2015-04-28 16:35  墨香一点足以  阅读(229)  评论(0)    收藏  举报

1.UDP简介

      使用UDP发送消息,对方不一定收到,因为所有的信息使用数据报的形式发送出去,这就要求客户端要始终等待接收服务器发送过来的信息,在Java中使用DatagramSocket类和DatagramPacket类完成UDP程序的开发。

2.程序实现

使用DatagramPacket类包装一条要发送的信息,之后使用DatagramSocket类用于完成信息的发送操作。DatagramPacket类的常用方法:

类型

方法

描述

构造

DatagramPacket(byte[] buf, int length)

构造 DatagramPacket,用来接收长度为 length 的数据包。
构造 DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
byte[] getData() 返回数据缓冲区。
int

getLength()

返回将要发送或接收到的数据的长度。

DatagramSocket类常用方法:

类型

方法

描述

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

send(DatagramPacket p)

从此套接字发送数据报包。
void

receive(DatagramPacket p)

从此套接字接收数据报包。

 

服务器端:
package org.demo.net;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPServer {
    public static void main(String[] args) throws Exception{
        DatagramSocket ds = null;
        DatagramPacket dp = null;
        ds = new DatagramSocket(3000);
        String str = "hello";
        dp = new DatagramPacket(str.getBytes(),str.length(),
                InetAddress.getByName("localhost"),9000);
        System.out.println("发送信息。");
        ds.send(dp);
        ds.close();
    }

}

运行结果:

2

客户端:
package org.demo.net;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPClient {
    public static void main(String[] args) throws Exception{
        DatagramSocket ds = null;
        byte[] buf = new byte[1024];//定义接收数据的字节数组
        DatagramPacket dp = null;
        ds = new DatagramSocket(9000);
        dp = new DatagramPacket(buf,1024);
        System.out.println("等待数据接收。");
        ds.receive(dp);
        String str = new String(dp.getData(),0,dp.getLength())+"from"
                +dp.getAddress().getHostAddress()+":"+dp.getPort();
        System.out.println(str);
        ds.close();
    }

}

运行结果:

3