Files
nanofiles/es/um/redes/nanoFiles/tcp/client/NFConnector.java
2026-04-20 22:38:38 +02:00

87 lines
2.9 KiB
Java

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;
}
}