238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,436
1

Пересылка файлов

08.12.2012, 18:46. Показов 1417. Ответов 1
Метки нет (Все метки)

Есть задание, надо переслать файлы из указанной директории используя сервер, почитал при помощи List<File> можно это сделать, но я так и не понял как, можете помочь?
Сервер:
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package tmp2;
 
import java.io.*;
import java.net.*;
import java.util.*;
 
public class ServerPart {
    
    public static final int PORT = 19999;
    
    public static List<ConnectionThread>clientList;
    public static List<Thread>threadList;
    public static List<File>fileList;
    
    
    public static void main(String[] args) {
        clientList = new ArrayList<ConnectionThread>();
        threadList = new ArrayList<Thread>();
        fileList = new ArrayList<File>();
        ServerSocket serversocket = null;
        boolean endless = true;
        try {
            serversocket = new ServerSocket(PORT);
            System.out.println("Server socket is created: " +serversocket.getInetAddress().getHostAddress()+ "\nWaiting or connection..");
            int ID = 0;
            while(endless) {
                Socket socket = serversocket.accept();
                addClient(socket, ID);
                ID++;
            }
        } catch(IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(serversocket != null)
                    serversocket.close();
                closeAllConnections();
            } catch(IOException e) {
                e.printStackTrace();
            }
        }
 
    }
    
    private static synchronized void addClient(Socket socket, int ID) {
        System.out.println("Got a connection from: " +socket.getInetAddress() +": "+ socket.getPort());
        ConnectionThread conn = new ConnectionThread(socket, ID, socket.getInetAddress());
        Thread th = new Thread(conn);
        threadList.add(th);
        clientList.add(conn);
        th.start();
    }
    
    private static void closeAllConnections() {
        for(int i=0; i<clientList.size(); i++) {
            ConnectionThread c = clientList.get(i);
            c.sendLine("Quiting...");
            clientList.remove(i);
        }
    }
    
    public static synchronized void fileSender() {
        
    }
 
}
 
class ConnectionThread implements Runnable {
    boolean c;
    PrintWriter out = null;
    BufferedReader buf = null;
    InetAddress clientAddress = null;
    public int ID;
    
    public ConnectionThread(Socket socket, int ID, InetAddress clientAddress) {
        this.ID = ID;
        this.clientAddress = clientAddress;
        try {
            out = new PrintWriter(socket.getOutputStream(), true);
            buf = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        } catch(IOException e) {
            System.out.println("Failed to connect! Connection id: " +ID+ ", client address: " +clientAddress);
        }
        c = true;
        System.out.println("New connection established with id: " + ID);
        out.println("You are connected as USER: " +ID);
        //ServerPart.fileSender();
    }
    
    public void sendLine(String message) {
        if(c)
            out.println(message);
    }
    
    public void run() {
        while(c) {
            try {
                String line = buf.readLine();
                if(line != null) {
                    if(line.equals("kill")) {
                        c = false;
                        throw new IOException();
                    }
                    
                }
            } catch(IOException e) {
                c = false;
                String dcmsg = "User: " +ID+ " diconnected!!";
                System.out.println(dcmsg);
            }
        }
    }
    
    public void close() {
        while(c) {
            try {
                buf.close();
                out.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
53
54
55
56
57
58
59
60
61
62
63
64
65
package tmp2;
 
import java.io.*;
import java.net.*;
 
public class ClientPart {
 
    
    public static void main(String[] args) {
        
        try {
            Socket socket = new Socket(InetAddress.getLocalHost(),19999);
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            Listening conn = new Listening(socket);
            Thread t = new Thread(conn);
            t.start();
            BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
            StringBuffer line = new StringBuffer("");
            System.out.println("For closing session enter 'kill'!");
            while(!line.toString().equals("kill")) {
                line.setLength(0);
                line.append(buf.readLine());
                out.println(line.toString());
            }
            out.close();
            buf.close();
            socket.close();
        } catch(UnknownHostException e) {
            System.out.println("Unexpected error, exiting..");
        } catch(IOException e) {
            System.out.println("There are no servers available, exiting..");
        }
    }
 
}
 
class Listening implements Runnable {
    BufferedReader buf = null;
    public Listening(Socket socket) {
        try {
            buf = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        } catch(IOException e) {
            System.out.println("Something wrong in the connection.");
        }
    }
    
    public void run() {
        StringBuffer line = new StringBuffer("");
        while(true) {
            try {
                line.setLength(0);
                line.append(buf.readLine());
                if(!(line.toString().equals("null"))) {
                    System.out.println(line);
                } else {
                    buf.close();
                    throw new Exception();
                }
            } catch(Exception e) {
                System.out.println("Lost connection to server!");
                System.exit(0);
            }
        }
    }
}
Добавлено через 39 минут
Хотел так, но увы, не работает((
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
    public static synchronized void fileSender(Socket socket) throws IOException {
        int fs = 9999999;
        long start = System.currentTimeMillis();
        int bR;
        int c = 0;
        File file = new File("E:\tmp");
        File[] files = file.listFiles();
        for(int fileInList = 0; fileInList<files.length; fileInList++) {
            byte[] mba = new byte[fs];
            InputStream is = socket.getInputStream();
            FileOutputStream fos = new FileOutputStream(file);
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            bR = is.read(mba,0,mba.length);
            c = bR;
            do {
                bR = is.read(mba,c,(mba.length-c));
                if(bR >= 0)
                    c += bR;
            } while(bR < -1);
            bos.write(mba,0,c);
            bos.flush();
            long end = System.currentTimeMillis();
            System.out.println(end-start);
            bos.close();
            socket.close();
        }
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2012, 18:46
Ответы с готовыми решениями:

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

Пересылка сообщений между клиентами
есть сервер class ServeOneJabber extends Thread { private Socket socket; private...

Сервер-клиент. Пересылка пакетов
Задача: пересылать с определенным интервалом пакеты(поток байт, не строки) на сервер и затем ждать...

Пересылка файлов.
Привет. Помогите новичку. Каким образом переслать файл с одного компьютера на другой (от клиента...

1
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,436
12.12.2012, 14:47  [ТС] 2
Не пересылает файлы полностью((
Клиент:
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
package tmp4_10_12_12_MINE;
 
import java.io.*;
import java.net.*;
 
public class Client {
    public static void main(String[] args) throws IOException {
        
        Socket socket = new Socket("192.168.0.105",19999);
        System.out.println("Connecting....");
        //kur bus novietoti faili no E:/share/
        File f = new File("E:/share/");
        //failu saraksts
        File[] files = f.listFiles();
        OutputStream os = socket.getOutputStream();
        DataOutputStream dos = new DataOutputStream(os);
        dos.write(files.length);
        int N = files.length;
        for(int i=0; i<N; i++) {
            dos.writeUTF(files[i].getName());
        }
        for(int i=0; i<N; i++) {
            int fS = (int)files[i].length();
            dos.write(fS);
        }
        for(int i=0; i<N; i++) {
            int fS = (int)files[i].length();
            byte[] buf = new byte [fS];
            FileInputStream fis = new FileInputStream(files[i].toString());
            BufferedInputStream bis = new BufferedInputStream(fis);
            bis.read(buf,0,buf.length);
            dos.write(buf,0,buf.length);
            dos.flush();
            bis.close();
        }
        socket.close();
    }
 
}
Сервер:
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
66
67
68
69
70
71
72
73
74
package tmp4_10_12_12_MINE;
 
import java.io.*;
import java.net.*;
import java.util.*;
 
public class Server {
    public static void main(String[] args) throws IOException, EOFException {
        
        //FileOutputStream fos;
        BufferedOutputStream bos;
        OutputStream op;
        DataOutputStream dos;
        InputStream in;
        int len;
        int smblen;
        boolean flag = true;
        DataInputStream clientData;
        //BufferedInputStream clientBuff;
        
        ServerSocket sSocket = new ServerSocket(19999);
        Socket socket = null;
        socket = sSocket.accept();
        
        while(flag) {
            while(flag==true) {
                in = socket.getInputStream();
                clientData = new DataInputStream(in);
                //clientBuff = new BufferedInputStream(in);
                System.out.println("Starting...");
                
                int fS = clientData.read();
                //failu saraksts
                ArrayList<File>files = new ArrayList<File>(fS);
                //faila izmers
                ArrayList<Integer>sizes = new ArrayList<Integer>(fS);
                for(int i=0; i<fS; i++) {
                    File f = new File(clientData.readUTF());
                    files.add(f);
                }
                for(int i=0; i<fS; i++) {
                    sizes.add(clientData.readInt());
                }
                for(int i=0; i<fS; i++) {
                    if(fS - i == 1) {
                        flag= false;
                    }
                    len = sizes.get(i);
                    System.out.println("File " +(i+1)+ " size: " +len);
                    //no kurienes bus nemti faili
                    op = new FileOutputStream("E:/share_exit/" + files.get(i));
                    dos = new DataOutputStream(op);
                    bos = new BufferedOutputStream(op);
                    byte[] buf = new byte[2048];
                    //ierakstam failus
                    bos.write(buf,0,buf.length);
                    while(len > 0 && (smblen = clientData.read(buf)) > 0) {
                        dos.write(buf,0,smblen);
                        len = len-smblen;
                        dos.flush();
                    } dos.close();
                }
                
            }
            if(flag==false) {
                socket = sSocket.accept();
                flag=true;
            }
            sSocket.close();
        }
 
    }
 
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2012, 14:47

Пересылка файлов
Здравствуйте! Реализую следующий проект: пересылка xml-файлов по сети по запросу пользователя....

Пересылка файлов по мылу.
Подскажите, каким образом можно переслать в email'е файл, чтоб он был распакован только конечным...

делфи пересылка файлов
И так у меня есть файлы которые мне надо перекинуть другому человеку и приэтом через делфи и чтоб...

Пересылка группы файлов на хост
Ест программа которая по инажатию отпровляет фаил на хост А есть ли способ сделат ь чтобы она...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.