Client
No notes
Syntax:
No syntax
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) {}
}
}