java UDP网络通信实例

客观意义的服务端

package com.java.xiong.Net17;

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

public class UdpServer {

	public static final int PORT = 30000;
	// 定义每个数据报的最大大小为4K
	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() {
		try {
			// 创建DatagramSocket对象
			DatagramSocket socket = new DatagramSocket(PORT);
			// 采用循环接收数据
			for (int i = 0; i < 1000; i++) {
				// 读取Socket中的数据,独到的数据放入inPacket封装的数组中
				socket.receive(inPacket);
				// 判断inOacket。getData()和inBuff是否是同一个数组
				System.out.println(new String(inBuff, 0, inPacket.getLength()));
				// 从字符串中取出一个元素作为发送的数据
				byte[] sendData = books[i % 4].getBytes();
				// 以指定的字节数组作为发送数据,以刚接收到的DatagramPacke的
				// 源SocketAddress作为目标SocketAddress创建DataramPacket
				outPacket = new DatagramPacket(sendData, sendData.length,
						inPacket.getSocketAddress());
				//发送数据
				socket.send(outPacket);

			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String [] args){
		new UdpServer().init();
	}

}

客户端

package com.java.xiong.Net17;

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

public class UdpClient {

	// 定义发送数据报的目的地
	public static final int DEST_POST = 30000;
	public static final String DEST_IP = "127.0.0.1";
	// 定义每个数据报的最大大小为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 = null;

	public void init() {
		try {
			// 创建一个客户端的DatagramSocket,使用随机端口
			DatagramSocket socket = new DatagramSocket();
			// 初始化发送的DatagramSocket,它包含一个长度为0的字节数组
			outPacket = new DatagramPacket(new byte[0], 0,
					InetAddress.getByName(DEST_IP), DEST_POST);
			//创建键盘输入流
			Scanner scan=new Scanner(System.in);
			//不断的读取键盘输入
			while(scan.hasNextLine()){
				//将键盘输入的一行字符串转换成字节数组
				byte[]buff=scan.nextLine().getBytes();
				//设置发送的DatagramPacket中的字节数组
				outPacket.setData(buff);
				//发送数据报
				socket.send(outPacket);
				//读取Socket中的数据,读取到的数据放在inPacket所封装的字节数组中
				socket.receive(inPacket);
				System.out.println(new String (inBuff,0,inPacket.getLength()));
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new UdpClient().init();
	}

}


你可能感兴趣的:(网络,通信,实例,UDP)