Помогите разобраться с Socket Сокетом

Рейтинг: 0Ответов: 1Опубликовано: 12.11.2014

Дело в том, что когда клиент подключается к серверу и передает несколько раз данные, то сервер ИНОГДА отображает, что будто клиент подключился к серверу за 1 подход 3-5 раз (то есть клиент нажал на кнопку 1 раз, а сервер говорит, что 5 раз).

http://snag.gy/suSyj.jpg

Код Java Server: http://pastebin.com/tkYtSW44

Код Android Java Client: http://pastebin.com/E5g3HjZ7

Дело простое. Нажал на кнопку, сказал слово. Данные переходят на сервер, а он сохраняет в файл. В итоге когда записываются файлы, то получается так.

0 файл норм\1 файл норм\ 2 файл норм\ (после происходит скачек с цифры 2 на 6)
3 файл норм\4 файл, крякоябры всякие\ 5 вообще цифры не понятные\ 6 пустота полная...

Ответы

▲ 2Принят

В коде сервера есть несколько ошибок.

inputStream.read(buf);

Эта строка читает в буффер, но Вы абсолютно игнорируете количество байт, которое она читает. Соответственно, когда чуть ниже записываете данные

fileOutputStream.write(buf);

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

Правильно где-то так:

byte buf[] = new byte[size+100];
int bytes_read = inputStream.read(buf);
File file = new File("Files/asd"+a+".txt");
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(buf, bytes_read);
fileOutputStream.close();

В клиенте такая же ошибка.

Бесконечный цикл в клиенте - это нечто. :)

while (true){

}

Не нужно понапрасну садить батарею пользователю.