Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Передача нескольких файлов по сети / 8 сообщений из 8, страница 1 из 1
11.10.2013, 13:49:16
    #38424431
apprentice-novice
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача нескольких файлов по сети
Прога работает и передает фал когда он в одном экземпляре, но как только файлов становится несколько возникает проблема. Ругается в момент передачи размера второго файла. Кто сталкивался с подобным подскажите пожалуйсто.
сервер

try
{
ss=new ServerSocket(9002);

while(true){
socket=ss.accept();
//outS = new PrintWriter(socket.getOutputStream(),true);
din=new DataInputStream(socket.getInputStream());
int filesCount=din.readInt();
area.setText("Передается " + filesCount + " файлов\n");
System.out.println("Передается " + filesCount + " файлов\n");
for (int i =0; i<filesCount; i++){
ei=i;

System.out.println("Ожидание получения размера файла");
fileS=din.readLong();
System.out.println("Ожидание получения имени файла");
fIn=din.readUTF();

System.out.println("Пытаюсь скопировать файл "+fIn+" размер - "+fileS);
fout=new FileOutputStream("D:/dst/"+fIn);
byte[] buffer = new byte[64*1024];
int count, total=0;

while((count = din.read(buffer)) != -1){
total += count;
fout.write(buffer, 0, count);

if(total == fileS){
System.out.println("Копирование файла завершено");

break;
}
}
outS = new PrintWriter(socket.getOutputStream(),true);
outS.write("Server get file "+fIn);
outS.close();
fout.close();
}
din.close();

}

}catch(IOException e){System.out.println("Ошибка работы итерация "+ei);}

}

Клиент

int count=vec.size();

try
{

out = new DataOutputStream(socket.getOutputStream());
out.writeInt(count);
}catch(IOException e){};
String comp=null;
for (int i=0; i<vec.size(); i++){

System.out.println("Пердаю "+i+"-й файл "+vec.get(i).getName());
try
{

System.out.println("FILESIZE "+vec.get(i).length()+" FILENAME "+vec.get(i).getName());
int w=0;

out.writeLong(vec.get(i).length());
out.writeUTF(vec.get(i).getName());

}catch(IOException e){System.out.println("ERROR - Не могу передать размер и имя файла");}
try
{
File f = vec.get(i);
FileInputStream in = new FileInputStream(f);
byte [] buffer = new byte[64*1024];
int counter;

while((counter = in.read(buffer)) != -1){
out.write(buffer, 0, counter);
}
out.flush();
in.close();

//out.close();

BufferedReader inS = new BufferedReader(new InputStreamReader(socket.getInputStream()));
int w=0;

while(!(comp=inS.readLine()).equals("Server get file "+vec.get(i).getName())){
System.out.println(w++);
}
inS.close();

}catch(IOException e){System.out.println("ERROR - Не могу передать файл");}
System.out.println(comp);

}
}

Извиняюсь за внешний вид но теги почему то не работают.
...
Рейтинг: 0 / 0
11.10.2013, 14:00:33
    #38424456
cdtyjv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача нескольких файлов по сети
Хотите получить ответ - оформите нормально код (у всех тэги работают, а у вас нет? :)) и покажите, какая ошибка вылезает.
...
Рейтинг: 0 / 0
11.10.2013, 14:01:35
    #38424457
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача нескольких файлов по сети
cdtyjvХотите получить ответ - оформите нормально код (у всех тэги работают, а у вас нет? :)) и покажите, какая ошибка вылезает.
У меня теги не работают (кнопка). Приходится руками набирать. Нубы тем более не знают как.
...
Рейтинг: 0 / 0
11.10.2013, 14:22:44
    #38424483
apprentice-novice
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача нескольких файлов по сети
Ошибка вот. Но сокет нигде не закрывал

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
java.net.SocketException: Socket closed
	at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:116)
	at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
	at java.io.DataOutputStream.writeLong(DataOutputStream.java:224)
	at clientcopyfile.ClientCopyFile.jButton1ActionPerformed(ClientCopyFile.java:116)
	at clientcopyfile.ClientCopyFile.access$000(ClientCopyFile.java:19)
	at clientcopyfile.ClientCopyFile$1.actionPerformed(ClientCopyFile.java:69)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)[]



P.S. ну раз руками то руками
...
Рейтинг: 0 / 0
11.10.2013, 14:26:12
    #38424487
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача нескольких файлов по сети
Вероятно вы всё позакрывали после передачи файла. Вот второй файл в тот же сокет и не пролазит.
...
Рейтинг: 0 / 0
11.10.2013, 14:41:09
    #38424503
apprentice-novice
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача нескольких файлов по сети
Например где?
Код: sql
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.
int count=vec.size();

    try
       {
       
        out = new DataOutputStream(socket.getOutputStream());
        out.writeInt(count);
    }catch(IOException e){};
    String comp=null;
    for (int i=0; i<vec.size(); i++){
        
        System.out.println("Пердаю "+i+"-й файл "+vec.get(i).getName());
        try
            {           
         
            System.out.println("FILESIZE "+vec.get(i).length()+" FILENAME "+vec.get(i).getName());
            int w=0;
        
        out.writeLong(vec.get(i).length());
        out.writeUTF(vec.get(i).getName());  
        
        }catch(IOException e){System.out.println("ERROR - Не могу передать размер и имя файла"); e.printStackTrace();}
        try
        {
        File f = vec.get(i);
         FileInputStream in = new FileInputStream(f);
                byte [] buffer = new byte[64*1024];
                int counter;
                
                while((counter = in.read(buffer)) != -1){
                    out.write(buffer, 0, counter);
                }
                out.flush();
                in.close();
                
                //out.close();
                
        BufferedReader inS  = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        int w=0;
        
        while(!(comp=inS.readLine()).equals("Server get file "+vec.get(i).getName())){
           System.out.println(w++);
        }       
        inS.close();
        
        }catch(IOException e){System.out.println("ERROR - Не могу передать файл");}
        System.out.println(comp);
        
    }        
    }
...
Рейтинг: 0 / 0
11.10.2013, 14:47:36
    #38424514
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача нескольких файлов по сети
Код: java
1.
2.
BufferedReader inS  = new BufferedReader(new InputStreamReader(socket.getInputStream()));
inS.close();


BufferedReader.close() -> InputStreamReader.close() -> SocketInputStream.close() -> Socket.close()
...
Рейтинг: 0 / 0
11.10.2013, 14:51:58
    #38424526
apprentice-novice
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача нескольких файлов по сети
мда тупанул
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Передача нескольких файлов по сети / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]