udp sender 精确到毫秒

1。源文件。
package sender;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Properties;

public class UDPSender{
	private String filename;
	private String host;
	private int port;
	private int interval=0;
	private int packetSize = 512;
	int loop = 0;
	private Date time = null;
	
	private SocketAddress destAddress;
	private DatagramSocket clientSocket = null;
	
	public UDPSender() {
		Properties properties = new Properties();
		try {
			properties.load(new FileInputStream("configuration.properties"));
			packetSize = Integer.parseInt(properties.getProperty("packetsize"));
			host = properties.getProperty("host");
			port = Integer.valueOf(properties.getProperty("port"));
			filename = properties.getProperty("file");
			interval = Integer.parseInt(properties.getProperty("interval"));
			loop = Integer.parseInt(properties.getProperty("loop"));
			time = parseTime(properties.getProperty("time"));
			
			System.out.println(
					new StringBuilder("sender properties:\n")
					.append("packet size:").append(packetSize).append("\n")
					.append("host:").append(host).append("\n")
					.append("port:").append(port).append("\n")
					.append("file:").append(filename).append("\n")
					.append("interval:").append(interval).append("\n")
					.append("loop:").append(loop).append("\n")
					.append("time:").append(toStandTimeFormat()).append("\n")
					.toString()
			);

			destAddress = new InetSocketAddress(host,port);
			clientSocket = new DatagramSocket();
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
	}

	private String toStandTimeFormat(){
		StringBuffer sb = new StringBuffer();
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(time);
		sb.append(calendar.get(Calendar.YEAR) + "-");
		sb.append((calendar.get((Calendar.MONTH)) + 1) + "-");
		sb.append(calendar.get(Calendar.DAY_OF_MONTH) + " ");
		sb.append(calendar.get(Calendar.HOUR_OF_DAY) + ":");
		sb.append(calendar.get(Calendar.MINUTE) + ":");
		sb.append(calendar.get(Calendar.SECOND) + ":");
		sb.append(calendar.get(Calendar.MILLISECOND));
		
		return sb.toString();
	}
	
	private Date parseTime(String time){
		String regex = "yyyyMMddHHmmssSSS";
		Date result = null;
		try {
			result = new SimpleDateFormat(regex).parse(time);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		return result;
	}
	
	public void send(){
		if(loop <= 0){
			for(;;){
				startSendOneTime();
			}
		}else{
			for(int i=0;i<loop;i++){
				startSendOneTime();
			}
		}
	}
	
	private void startSendOneTime() {
		try {
			File  file = new File(filename);
			System.out.println("file size: " + file.length());
			InputStream in = new FileInputStream(file);
			byte[] buff = new byte[packetSize];
			int len;
			while((len=in.read(buff))>0){
				if(clientSocket!=null){
					clientSocket.send(new DatagramPacket(buff,0,len,destAddress));
					System.out.println("send " + len + "bytes");
				}
				if(interval>0){
					Thread.sleep(interval);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			return;
		}
	}
	
	public Date getTime() {
		return time;
	}

	public static void main(String[] args) {
		UDPSender sender = new UDPSender();
		Date time = sender.getTime();
		
		
		long timeInMills = time.getTime() - System.currentTimeMillis();
		if(timeInMills <= 0){
			System.out.println("The time you offered has passed...");
			try {
				Thread.sleep(4000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			return;
		}else{
			System.out.println("You have " + (timeInMills / 1000) + "s left." );
		}
		
		for(;;){
			if(System.currentTimeMillis() >= time.getTime()){
				break;
			}
		}
		sender.send();
	}
}



2。 需要的 文件有四个,见附件。


你可能感兴趣的:(java,thread,.net)