package es.um.redes.nanoFiles.tcp.client; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.RandomAccessFile; import java.net.InetSocketAddress; import java.net.Socket; import java.net.UnknownHostException; import java.text.SimpleDateFormat; import java.util.Date; import es.um.redes.nanoFiles.tcp.message.PeerMessage; import es.um.redes.nanoFiles.tcp.message.PeerMessageOps; import es.um.redes.nanoFiles.util.FileInfo; //Esta clase proporciona la funcionalidad necesaria para intercambiar mensajes entre el cliente y el servidor public class NFConnector { private Socket socket; private InetSocketAddress serverAddr; private DataInputStream dis; private DataOutputStream dos; public NFConnector(InetSocketAddress fserverAddr) throws UnknownHostException, IOException { serverAddr = fserverAddr; /* * done: (Boletín SocketsTCP) Se crea el socket a partir de la dirección del * servidor (IP, puerto). La creación exitosa del socket significa que la * conexión TCP ha sido establecida. */ /* * done: (Boletín SocketsTCP) Se crean los DataInputStream/DataOutputStream a * partir de los streams de entrada/salida del socket creado. Se usarán para * enviar (dos) y recibir (dis) datos del servidor. */ socket = new Socket(serverAddr.getAddress(), serverAddr.getPort()); dis = new DataInputStream(socket.getInputStream()); dos = new DataOutputStream(socket.getOutputStream()); } public void test() { /* * done: (Boletín SocketsTCP) Enviar entero cualquiera a través del socket y * después recibir otro entero, comprobando que se trata del mismo valor. */ /* double rand = Math.random() * 100; int intNumber = (int) rand; dos.writeInt(intNumber); System.out.println("sent " + intNumber); int newIntNumber = dis.readInt(); System.out.println("received " + intNumber); */ try { PeerMessage msgOut = new PeerMessage(PeerMessageOps.OPCODE_REQUEST_PEER_FILES); msgOut.writeMessageToOutputStream(dos); System.out.println("sent " + PeerMessageOps.opcodeToOperation(msgOut.getOpcode())); PeerMessage msgIn = PeerMessage.readMessageFromInputStream(dis); System.out.println("received " + PeerMessageOps.opcodeToOperation(msgIn.getOpcode())); System.out.println("(" + new SimpleDateFormat("HH:mm:ss:SS").format(new Date())); if (msgIn.getOpcode() == PeerMessageOps.OPCODE_PEER_FILE) { System.out.println("file content: "); System.out.println("last = " + msgIn.getLast()); System.out.println("fileSize = " + msgIn.getFileSize()); System.out.println("hash = " + msgIn.getFileHash()); System.out.println("long = " + msgIn.getFilenameLong()); System.out.println("val = " + msgIn.getFilenameVal()); } socket.close(); } catch (IOException e) { e.printStackTrace(); } } public InetSocketAddress getServerAddr() { return serverAddr; } }