Привет, мир переполнения стека, я некоторое время боролся с самой простой и распространенной проблемой в Java IO, и теперь мне нужна ваша помощь для ее решения.
Ознакомьтесь с этим фрагментом кода, который у меня есть в блоке try, в thread.run ():
// connect to client socket, and setup own server socket
clientSocket = new Socket(serverHostname, CLIENT_PORT);
//send a test command to download a file
String downloadFileName = "sample.txt";
DataOutputStream dataOutputStream = new DataOutputStream(clientSocket.getOutputStream());
System.out.println("Sending a request to download file : " + downloadFileName + " from user: Arsa node"); //todo: replace with node user later
dataOutputStream.writeUTF("D/sample.txt");
//close socket if host isn't detected anymore, and if socket doesn't become null suddenly
dataOutputStream.flush();
dataOutputStream.close();
System.out.println("****File has been sent****");
in = new DataInputStream(clientSocket.getInputStream());
byte[] retrievedFileData = new byte[8036];
if (in.readInt() > 0) {
System.out.println("Starting file download!");
in.read(retrievedFileData);
System.out.println("File data has been read, converting to file now");
//closing input stream will close socket also
in.close();
}
clientSocket.close();
2 Основные вопросы, которые приводили меня в замешательство до смерти:
Почему dataOutputStream.close () необходимо запустить для writeUTF, чтобы фактически отправить мою строку в сокет сервера, я обнаружил, что когда у меня нет dos.close (), данные не 't извлекается с другой стороны, кроме того, потому что я закрываю его, я больше не могу читать из сокета - так как кажется, что соединение сокета закрывается, когда выходной поток ранее был закрыт ...
- Чтолучший способ, следуя какой-то схеме, чтобы сделать это?Для контекста все, что я пытаюсь сделать, это написать имя файла, которое я ищу, чтобы загрузить на мой клиент, а затем сразу же прочитать ответ, который, как я ожидаю, будет байтами с файлом, любую обработку ошибок я буду рассматривать как частьмоего развития.
В общем, не должно быть сложным что-то записать в сокет, а затем прочитать и принять его ответ ... что здесь не так,любая помощь будет принята с благодарностью!Если вам понадобится фрагмент кода ServerSocket, я с удовольствием поделюсь с вами.