您当前的位置: 首页 >  udp

郭梧悠

暂无认证

  • 4浏览

    0关注

    402博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

UDP通信的简单实现(程序)

郭梧悠 发布时间:2012-05-26 23:55:33 ,浏览量:4

信息处理接口,定义了信息的关闭,发送,和接收

public interface MessageAction {
    void sendMessage();
    void receiveMessage();
    void close();
}
Udp类实现了MessageAction封装了下面的信息,并提供了相应的get和set方法
private int sendPort;// 要发送数据的端口号端口号
	private int localPort;// 本机端口号
	InetAddress address = null;// 地址信息
	DatagramSocket socket = null;
	DatagramPacket receivePacket = null;// 接收用的数据包
	DatagramPacket sendPacket = null;// 发送数据包
	byte[] bytesToSend = new byte[255];// 要发送的字节数组
构造器如下

public Udp(int sendPort, InetAddress address, DatagramSocket socket,
			byte[] bytesToSend) {
		super();
		this.sendPort = sendPort;
		this.address = address;
		this.socket = socket;
		this.bytesToSend = bytesToSend;
	}

	public Udp(InetAddress address, DatagramSocket socket, byte[] bytesToSend) {
		this.address = address;
		this.socket = socket;
		this.bytesToSend = bytesToSend;
	}

	public Udp(int sendPort, int localPort, InetAddress address,
			DatagramSocket socket, DatagramPacket receivePacket,
			DatagramPacket sendPacket, byte[] bytesToSend) {
		super();
		this.sendPort = sendPort;
		this.localPort = localPort;
		this.address = address;
		this.socket = socket;
		this.receivePacket = receivePacket;
		this.sendPacket = sendPacket;
		this.bytesToSend = bytesToSend;
	}

	public Udp() {

	}
sendMessage和receiveMessage方法的实现如下

/**
	 * 发送数据包
	 */
	@Override
	public void sendMessage() {
		try {

			//初始化发送的数据包
			this.sendPacket = new DatagramPacket(this.bytesToSend,
					this.bytesToSend.length, address, sendPort);
			this.socket.send(sendPacket);//执行发送
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	/**
	 * 接收数据包,把接收到的数据放入字节数组buf中,因为一般而言,
	 * 需要调用getOffset()和getData()方法来访问刚接收到的数据
	 * 如果直接调用getData()方法,该方法总是返回字节数组的原始大小,忽略了
	 * 实际数据的内部偏移量和长度信息,所以用到了buf来处理信息
	 */
	@Override
	public void receiveMessage() {
		try {
			//初始化接收的数据包
			this.receivePacket = new DatagramPacket(
					new byte[this.bytesToSend.length], this.bytesToSend.length);
			this.socket.receive(receivePacket);
			//把接收到的数据放入字节数组buf中,因为一般而言,需要调用getOffset()和getData()方法来访问刚接收到的数据
			byte[] buf = new byte[receivePacket.getLength()];
			System.arraycopy(receivePacket.getData(),
					receivePacket.getOffset(), buf, 0, buf.length);

			String message = new String(buf);//用字节数组创造相应的字符串
			System.out.println(message);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public void close() {
		this.socket.close();

	}

	
下面是Udp的具体的子类UdpClient和UdpServer的具体的实现

public class UdpClient extends Udp {

	public UdpClient() {
		super();
		// TODO Auto-generated constructor stub
	}

	public UdpClient(InetAddress address, DatagramSocket socket,
			byte[] bytesToSend) {
		super(address, socket, bytesToSend);
		// TODO Auto-generated constructor stub
	}

	public UdpClient(int sendPort, InetAddress address, DatagramSocket socket,
			byte[] bytesToSend) {
		super(sendPort, address, socket, bytesToSend);
		// TODO Auto-generated constructor stub
	}

	public UdpClient(int sendPort, int localPort, InetAddress address,
			DatagramSocket socket, DatagramPacket receivePacket,
			DatagramPacket sendPacket, byte[] bytesToSend) {
		super(sendPort, localPort, address, socket, receivePacket, sendPacket,
				bytesToSend);
		// TODO Auto-generated constructor stub
	}
	
	public static void main(String args[]) throws UnknownHostException, SocketException {
		Udp us = new UdpClient(InetAddress.getLocalHost(),
				new DatagramSocket(8889), "我是客户端".getBytes());
		us.setSendPort(8888);//设置要发送的端口号
		us.sendMessage();
		
		us.receiveMessage();
		
//		us.close();
	}

}
UdpServer

public class UdpServer extends Udp {
	public static void main(String args[]) throws UnknownHostException, SocketException {
		Udp us = new UdpServer(InetAddress.getLocalHost(),
				new DatagramSocket(8888), "我是服务端".getBytes());
		us.receiveMessage();//接收客户端的信息
		us.setSendPort(8889);//设置要发送的端口号
		us.sendMessage();
		//us.close();
	}

	public UdpServer(InetAddress address, DatagramSocket socket,
			byte[] bytesToSend) {
		super(address, socket, bytesToSend);
		// TODO Auto-generated constructor stub
	}

	public UdpServer() {
		super();
		// TODO Auto-generated constructor stub
	}

	public UdpServer(int port, InetAddress address, DatagramSocket socket,
			byte[] bytesToSend) {
		super(port, address, socket, bytesToSend);
		// TODO Auto-generated constructor stub
	}

}
在myeclipse里先运行UdpServer在运行UdpClient,检查程序结果便可

关注
打赏
1663674776
查看更多评论
立即登录/注册

微信扫码登录

0.0412s