Client

by aa on March 19th, 2012
No notes
Syntax: No syntax
Show lines - Hide lines - Show in textbox - Download
package source;
 
import java.io.*;
import java.net.*;
import java.text.SimpleDateFormat;
import java.util.*;
 
@SuppressWarnings("unused")
public class Client
{
 
	private byte[] incomingData = new byte[512];
	private byte[] outgoingData = new byte[512];
 
	private byte[] reserveBuffer = new byte[512];
 
	private DatagramSocket clientSocket;
 
	private InetAddress serverAddress = InetAddress.getByName("localhost");
	private final int serverPort = 9999;
 
	private String data = null;
 
	private final String date_format = "yyyy.MM.dd-HH.mm.ss";
 
 
	Client(int port, String filename) throws Exception
	{
		clientSocket = new DatagramSocket(port);
		data = filename;
	}
 
	private void request(String mode) throws Exception
	{
		if(mode.equals("RRQ"))
		{
			sendRRQ();
		} else if(mode.equals("WRQ")) 
		{
			sendWRQ();
		} else {
			System.out.println("Unknown operation mode. Pick between RRQ or WRQ.");
		}
	}
 
 
	private void sendWRQ() throws Exception
	{
		String rrq = "WRQ-" + data;
		outgoingData = rrq.getBytes();
 
		DatagramPacket output = new DatagramPacket(outgoingData, outgoingData.length, serverAddress, serverPort);
		clientSocket.send(output);
		sendData();
	}
 
	private void sendData() throws Exception
	{
		DatagramPacket dataTransfer = new DatagramPacket(reserveBuffer, reserveBuffer.length, serverAddress, serverPort);
		InputStream fis = new FileInputStream(new File(data));
 
		int x;
		while((x = fis.read(reserveBuffer,0,512)) != -1)
		{
			dataTransfer.setLength(x);
			clientSocket.send(dataTransfer);
			Thread.sleep(5);
		}
 
		fis.close();
	}
 
 
	private void sendRRQ() throws Exception
	{
		String rrq = "RRQ-" + data;
		outgoingData = rrq.getBytes();
 
		DatagramPacket output = new DatagramPacket(outgoingData, outgoingData.length, serverAddress, serverPort);
		clientSocket.send(output);
		if(receiveResponse())
		{
			receiveData();
		} 
	}
 
 
	private boolean receiveResponse() throws Exception
	{
		DatagramPacket response = new DatagramPacket(incomingData, incomingData.length);
		clientSocket.receive(response);
 
		String rsp = new String(response.getData(),0,response.getLength());
		if(rsp.contains("ERROR"))
		{
			System.out.println(rsp);
			return false;
		} 
		return true;
	}
 
 
	private void receiveData() throws Exception
	{
		Calendar cal = Calendar.getInstance();
		SimpleDateFormat prefix = new SimpleDateFormat(date_format);
		String date = prefix.format(cal.getTime()).toString();
 
		DatagramPacket receiveData = new DatagramPacket(incomingData, incomingData.length);
		OutputStream fos = new FileOutputStream(new File(date+data));
		System.out.println("I get to here 1");
 
		DatagramPacket sendAck = new DatagramPacket(outgoingData, outgoingData.length, serverAddress, serverPort);
		System.out.println("I get to here 2");
 
		while(true)
		{
			clientSocket.receive(receiveData);
			clientSocket.send(receiveData);
			System.out.println("I get to here 3");
 
			if(receiveData.getLength() == 512)
			{
				fos.write(receiveData.getData());
			} else {
				fos.write(receiveData.getData(), receiveData.getOffset(), receiveData.getLength());
	            break;
			}
		}
		fos.close();
		clientSocket.close();
	}
 
	public static void main(String[] args)
	{
 
		try {
 
			new Client(9998, "img.jpg").request("RRQ");
		} catch (Exception e) {}
	}
}
 

Leave a Reply

Note: XHTML is allowed. Your email address will never be published.

Subscribe to this comment feed via RSS