powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Чтение из сокета и обработка ошибок
3 сообщений из 3, страница 1 из 1
Чтение из сокета и обработка ошибок
    #33602361
K1RUHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Есть клиент, который закачивает файл на сервер и есть сервер, который соответственно принимает этот файл.

Вот код сервера, который осуществляет чтение из сокета и запись в файл:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
		    reader =  new  BufferedInputStream(socket.getInputStream());
		    writer =  new  BufferedOutputStream( new  FileOutputStream(file));
     
		     byte [] buffer =  new   byte [JavaServer.BUFFER_SIZE];
		     int  length;
		     try {
			 while ((length = reader.read(buffer)) != - 1 ){
			    writer.write(buffer,  0 , length);
			    writer.flush();
			}
		    }
		     catch (IOException e){
			System.out.println("Обработка ошибки!");
			writer.close();
			writer =  null ;
			file.delete();
		    }
		     finally {
			System.out.println("Блок finally.");
			 if (writer !=  null )
			    writer.close();		 
		    }

Если во время закачки закрыть клиента, то сработает блок catch, который удалит недописанный файл. Но я хочу сделать еще на клиенте кнопку Cancel, которая будет делать тоже самое:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
	cancelButton.addActionListener( new  ActionListener(){
		 public   void  actionPerformed(ActionEvent event){
		     try {
			socket.close();
		    }
		     catch (IOException e){
			e.printStackTrace();
		    }
		}
	    });

Вот только при нажатии на нее, ошибки на сервере не генерируется, и соотвественно выполняется только блок finally. В чем разница между socket.close и просто закрытием окна? И можно ли как-нибудь сгенерировать последнее не закрывая клиента?
...
Рейтинг: 0 / 0
Чтение из сокета и обработка ошибок
    #33602511
BlackWall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это можно сделать по-нормальному - создать протокол, по которому сначала передается размер пересылаемого файла. Если полученных из сокета на сервере данных меньше, чем указано - это оно и есть. Кстати, рекомендую присмотреться к блоку обработки ошибок - возможна повторная попытка закрытия сокета при возникновении исключения в методе close(). Правильнее было бы закрывать файл в блоке finally и удалять файл в нем же при наличии ошибки ввода-вывода.
...
Рейтинг: 0 / 0
Чтение из сокета и обработка ошибок
    #33602628
K1RUHA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думал уже о передаче вместе с именем файла еще и его размер. Так и сделаю, и соответственно блок catch удалю, а проверку размера буду делать в finally.

Просто хотел разобраться, как сервер различает, что клиента просто закрыли%
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Чтение из сокета и обработка ошибок
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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