powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Передача файлов через сокеты (требуется помощь)
2 сообщений из 2, страница 1 из 1
Передача файлов через сокеты (требуется помощь)
    #39201601
okuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача: реализовать сервера и клиента для передачи файлов. Сервер отправляет файл клиенту по запросу. Сервер должен уметь обслуживать одновременно несколько клиентов.

В результате доконца отладить программу не получается самостоятельно, получаю ошибку "Socket is closed", требуется помощь, не понимаю почему сокет закрыт, я уже и вообще коментировал закрытие сокета и на сервере и клиенте. Такое ощущение, что он сам закрывается каким-то образом.
Сейчас сервер и клиент более-менее работают правильно, клиенты соединяются к серверу и забирают файлы. Если любой из клиент решит повторно забрать файл, то вываливается данная ошибка:


Код: java
1.
2.
3.
4.
5.
Exception in thread "main" java.net.SocketException: Socket is closed
	at java.net.Socket.getInputStream(Socket.java:903)
	at client.Client.main(Client.java:38)
C:\Users\ok\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
СБОРКА ЗАВЕРШЕНА СО СБОЕМ (общее время: 1 минута 3 секунды)




Сервер

Код: 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.
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;


public class Server {
    
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(15123);
        
        while (true) {
            Socket socket = serverSocket.accept();
            Runnable r = new ThreadedEchoHandler(socket);
            Thread t = new Thread(r);
            t.start();
        }
    }
}

class ThreadedEchoHandler implements Runnable {
 
    Socket socket;
 
    public ThreadedEchoHandler(Socket socket) {
        this.socket = socket;
    }
 
    @Override
    public void run() {
 
        String FILE_NAME = "files/file1.txt";

        File transferFile = new File(FILE_NAME);

        try (FileInputStream in = new FileInputStream(transferFile);) {

            OutputStream out = socket.getOutputStream();

            int c = 0;
            while ((c = in.read()) >= 0) {
                out.write(c);
                out.flush();
            }
            
            out.close();
            in.close();
//        s.close();
//            socket.close();

            System.out.println("File transfer complete");
        } catch (IOException ex) {
            Logger.getLogger(ThreadedEchoHandler.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally{
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException ex) {
                    Logger.getLogger(ThreadedEchoHandler.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }
}




Клиент:

Код: 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.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
    
    public static void main(String[] args) throws UnknownHostException, IOException {
        
        Socket socket = new Socket(InetAddress.getLocalHost(), 15123);
        System.out.println("Accepted connection : " + socket);
 
        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
        
        String userInput;
        String FILE_NAME = "files/file1.txt";
        
        while ((userInput = stdIn.readLine()) != null) {

            if (userInput.toLowerCase().equals("exit")) {
                break;
            }

            if (userInput.equals("1")) {

                InputStream in = socket.getInputStream();

                File copyFileName = new File(FILE_NAME);
                FileOutputStream out = new FileOutputStream(copyFileName);

                int c = 0;
                while ((c = in.read()) >= 0) {
                    out.write((char) c);
                }
                out.close();
                in.close();
//                socket.close();
            }
        }

        socket.close();
    }
}
...
Рейтинг: 0 / 0
Передача файлов через сокеты (требуется помощь)
    #39201706
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторin.close();
?
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Передача файлов через сокеты (требуется помощь)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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