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) {} } }