Форум программистов, компьютерный форум, киберфорум
Java: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/12: Рейтинг темы: голосов - 12, средняя оценка - 5.00
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437

Запрос файлов на сервере

20.12.2012, 11:39. Показов 2301. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сервер высылает пользователю список доступных файлов на сервере, клиент выбирает файл(пишет строку в консоле), сервер начинает пересылать запрашиваемый файл. У меня все крешится в тот момент когда клиент должен вписать название файла, вместо того чтоб ввести название файла, он сразу переходит обратно к серверу. Как это исправить?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.12.2012, 11:39
Ответы с готовыми решениями:

Запрос не проходит на сервере
Доброго времени суток! Имеется запрос к базе данных MySQL. INSERT INTO users VALUES ('name', 'pass', '(SELECT max(id) from students)') ...

Копирование файлов на сервере
Задача такая. Нужно на сервере создать множество папок с одинаковым файлом внутри. С папками разобрался: $i = 1; while ($i <= 10)...

Хранение файлов на сервере
народ подскажите как лучше будет хранить данные на сервере, ну у меня там по идее будет список файлов доступных для загрузки и за каждым...

14
 Аватар для kmi
55 / 55 / 14
Регистрация: 26.04.2010
Сообщений: 177
24.12.2012, 21:29
Возможно, проблема в том, как пользователь вводит название в консоли. Нажатие клавиши может восприниматься как ввод, что и приводит к запросу на сервер.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
25.12.2012, 16:55
Цитата Сообщение от Doctor_ Посмотреть сообщение
Сервер высылает пользователю список доступных файлов на сервере, клиент выбирает файл(пишет строку в консоле), сервер начинает пересылать запрашиваемый файл. У меня все крешится в тот момент когда клиент должен вписать название файла, вместо того чтоб ввести название файла, он сразу переходит обратно к серверу. Как это исправить?
42-ю строку закомментировать.
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
25.12.2012, 17:01  [ТС]
Цитата Сообщение от Skipy Посмотреть сообщение
42-ю строку закомментировать.
полезный совет
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
25.12.2012, 17:04
Цитата Сообщение от Doctor_ Посмотреть сообщение
полезный совет
очень полезный, только я бы назвал бы его не 42, а 4.7

Не по теме:


(пункт в правилах для тех кто в танке ;))

0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
25.12.2012, 17:08  [ТС]
Я тут много тем создавал по этому поводу, но на вопросы никто не отвечает, поэтому я попробовал упростить описание чтоб хотя бы дочитывали до конца.

Задание вообще связанно с пересылкой файлов и обработки его. Суть такова, включается сервер, при подключении клиента к серверу, сервер высылает список доступных файлов на сервере, клиент принимает список, и пишет один из файлов, запрос уходит на сервер, сервер обрабатывает запрос, посылает запрашиваемый файл, клиент принимает файл.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
25.12.2012, 17:10
попробуйте привести код и ошибки его выполнения, это может помочь...
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
25.12.2012, 17:12  [ТС]
Код сервера:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package WithOutGUI;
 
import java.io.*;
import java.net.*;
 
public class Server {
    public static final int PORT = 9999;
    public static void main(String[] args) {
        ServerSocket ss = null;
        try {
            ss = new ServerSocket(PORT);
            System.out.println("Sozdas server socket: " +ss.getInetAddress().getHostAddress() +"\nZdu podluchenij...\n");
        } catch(IOException e) {
            System.out.println("Chto-to ne tak s vkluchenijem");
            System.exit(-1);
        }
        System.out.println("Slushaju : " +PORT+ "...");
        while(true) {
            try {
                Socket s = ss.accept();
        HelperServer hs = new HelperServer(s);
        hs.start();
            } catch(IOException e) {
        System.out.println("Could not listen to port: " +ss.getLocalPort());
            }
        }
    }
}
 
class HelperServer extends Thread {
    Socket s;
    public HelperServer(Socket s) {
        this.s = s;
    }
    public void run() {
        try {
            //peresylka spiska dostupnyh failov serveru            
            DataOutputStream dOut = new DataOutputStream(s.getOutputStream());
            String files;
            File directory = new File("E://share//");
            File[] listOfFiles = directory.listFiles();
            dOut.writeUTF("Dospupnyje faily na servere:\n");
            for(int i=0; i<listOfFiles.length; i++) {
                files = listOfFiles[i].getName();
                dOut.writeUTF(files+"\n");
            }
            dOut.writeUTF("#END#");
            //server prinimajet zapros na fail i otsylajet ego
            DataInputStream dIn = new DataInputStream(s.getInputStream());
            String fileName = dIn.readUTF();
            File f = new File("E://share//" +fileName);
            DataOutputStream fOut = new DataOutputStream(s.getOutputStream());
            DataInputStream fReq = new DataInputStream(new FileInputStream(f));
            byte[] mba = new byte[1024];
            int c;
            while((c = fReq.read(mba)) != -1) {
                fOut.write(mba,0,c);
            }
            fOut.flush();
            fOut.close();
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}
Код клиента:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package WithOutGUI;
 
import java.io.*;
import java.net.*;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
public class Client {
    public static final int PORT = 9999;
    public static void main(String[] args) {
        Socket s = null;
        try {
            s = new Socket("192.168.0.105", PORT);
        } catch(UnknownHostException uhe) {
            System.out.println("Neizvestnyj host: " +s);
        } catch(IOException e) {
            System.out.println("Ne mogu podkluchitsia k serveru " +s+ "\nProverte, rabotajet li server");
        }
        while(true) {
            try {
                //dostupnyje faily na servere               
                DataInputStream dIn = new DataInputStream(s.getInputStream());
                String files;
                while(true) {
                    files = dIn.readUTF();
                    if(files.equals("#END#")) {
                        break;
                    }
                    System.out.println(files);
                }
                //zapros na fail i prijom faila
                DataOutputStream dOut = new DataOutputStream(s.getOutputStream());
                BufferedReader fIn = new BufferedReader(new InputStreamReader(System.in));
                String fileName = fIn.readLine();
                dOut.writeUTF(fileName);
                DataInputStream fileIn = new DataInputStream(s.getInputStream());
                FileOutputStream fOut = new FileOutputStream(fileName);
                byte[] mba = new byte[1024];
                int c;
                while((c = fileIn.read(mba)) != -1) {
                    fOut.write(mba,0,c);
                }
                fOut.flush();
                fOut.close();
            } catch(IOException e) {
                e.printStackTrace();
            }
        }
    }
}
В данный момент у меня проблемы с отсылкой файла, так как сервер отсылает список каждый раз.

java.io.EOFException
at java.io.DataInputStream.readUnsignedShor t(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at WithOutGUI.Client.main(Client.java:27)
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
25.12.2012, 17:29
думаю у вас проблемы с пониманием разницы байтового потока и потока символьного, почитайте внимательно в чём разница.
ну и потом так передавать немного неправильно, вам надо передать сначала заголовок с именем/длиной и тд, файла а потом вычитывать эту длину в байтах и при этом повесить это в отдельном потоке с таймером по истечении которого поток надо убить, так как сеть это негарантированная среда.
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
25.12.2012, 17:37  [ТС]
Я делал просто через PrintWriter та же проблемы была
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
25.12.2012, 17:59
Stream - битовый поток
Writer|Reader - символьный
чувствуете разницу?
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
25.12.2012, 18:01  [ТС]
Ну я так понимаю что мне список файлов надо отправлять символьно? Но при использовании Writer|Reader таже ошибка выскакивает.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
25.12.2012, 18:12
навскидку мне это видится так сначала кидаем строку (например в JSON-овском виде или xml) с инфой про имя филе и длину в байтах, потом парсим эту инфу и начинаем читать байтстрим с длиной которую предварительно передали,

вот тут похожее обсуждение гляньте
ну и пример http://www.java2s.com/Code/Jav... Socket.htm
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
25.12.2012, 18:15  [ТС]
так у меня по заданию сначала сервер высылает клиенту список доступны файлов, клиент высылает запрос, сервер высылает файл по запросу.. получается некий диалог между сервером и клиентом, а у меня еще до отсылки файла не дошло, у меня все ломается на начальной стадии при отсылке запроса серверу, все уходит в бесконечный цикл сервер так и пытается передать это список вместо того чтоб двигаться дальше
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
27.12.2012, 11:48  [ТС]
мне по пересылки файлов надо еще дойти, я не понимаю такие проблемы при пересылки списков, я пока пересылку файла даже не рассматриваю.. Используй битовый поток или символьный поток, ошибка все одна и таже
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.12.2012, 11:48
Помогаю со студенческими работами здесь

Сохранение файлов на сервере
у меня есть такой код: &lt;?php session_start(); include (&quot;db.php&quot;); if (!empty($_SESSION)and !empty($_SESSION)) { $Lietotajvards...

Обзор файлов на сервере
Добрый день! Подскажите скрипт, либо какой нибудь плагин, либо стандартный метод для того, чтобы просматривать файлы на сервере (в какой-то...

Сохранение файлов на сервере
Привет! Делаю небольшой проект на ASP.NET, требуется загружать файл, который выбрал пользователь с помощью FileUpload на сервер, чтобы...

Запись файлов на сервере
Возможно ли при помощи хтмл5 записывать файлы на сервер через форму

Удаление файлов на сервере
Здравствуйте, у меня такой вопрос как поставить у папки права 777. Стоит сборка denwer. Файлы которые нужно удалить находятся в директории...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru