Делаю робота на основе мобильно телефона (Nokia 5530). Компьютер будет в роли сервера. Обмен данными производится через вайфай. Под телефон пишу на JavaME. Написал первое приложение для обмена сообщениями с телефона на комп и обратно, все работает на ура. Программа-сервер ПОКА написана на Делфи. Перешел ко второму этапу разработки ПО для телефона. Нужно передавать кадры с камеры на комп через вайфай 2 раза в секунду. И тут начался кошмар, с JavaME знаком только пару недель. Я пока пытаюсь отослать 1 кадр на комп. И проблема в том что кадр удается получить, даже отправляет, но когда я пытаюсь сохранить полученный кадр, то открыть эту картинку для просмотра не получается, говорит что файл поврежден. Ниже код отправки этого самого кадра
- Код: Выделить всё • Развернуть
- public void SendIm()
 {
 try
 {
 System.out.println("Get snapshot");
 byte[] raw = videoControl.getSnapshot("encoding=png"); // получаем png картинку с камеры
 int size;
 size = raw.length; // получаем ее размер
 String s;
 s = "file"+Integer.toString(size)+"/"; // сообщение о том что это файл и его размер
 byte[] d = s.getBytes(); // переводим s в массив байт
 System.out.println(s);
 try
 {
 outputStream.write(d); // отправляем на сервер размер файла
 outputStream.flush();
 dataOutputStream.write(raw);// отправляем на сервер сам файл
 dataOutputStream.flush();
 }catch(IOException ioe){}
 }catch(MediaException me){}
 }
На делфи прием файла сделан так:
- Код: Выделить всё • Развернуть
- rocedure TForm1.ServerSocket1ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
 const
 MAX_BUF_SIZE = $4095; //Константа буффера
 var
 sd:integer;
 buf: TByteArr;
 b: array [0..1] of byte;
 str:string;
 I,c: integer;
 S,RText: String;
 Letra: char;
 MemoryStream: TMemoryStream; //Переменная потока памяти
 Buffer: array [0..MAX_BUF_SIZE] of Char; //Переменная буффера
 pc: PChar;
 begin
 Timer1.Enabled := true;
 RText := Socket.ReceiveText;
 if Receive=true then // если сервер в режиме приема файла
 begin
 Writing(RText); // принимаем файл
 end
 else
 begin
 if copy(RText, 1,4)='file' then // если первое слово в пришедшем пакете file то переводим сервер в режим приема
 begin
 MS := TMemoryStream.Create();
 Delete(RText,1,4); // удаляем из сообщения file
 size := StrToInt(copy(RText,1,pos('/',RText)-1)); // получаем размер файла
 Delete(RText,1,POS('/',RText));
 Receive := true; // переводим серевер в режим приема
 if RText <>'' then
 Writing(RText); // принимаем файл
 end;
 end;
 procedure TForm1.Writing(TextS: string);
 begin
 if MS.Size < size then // если размер буфера меньше размера файла
 begin
 MS.Write(Texts,Length(Texts)); // пишем в память принятый кусок файла
 // sMemo1.Lines.Add('Write');
 sProgressBar1.Position := MS.Size*100 div size;
 sStatusBar1.SimpleText := 'Принято '+IntToStr(MS.Size)+' из '+IntToStr(Size);
 end;
 if MS.Size = size then // если приняли все то
 begin
 Receive := true;
 MS.Position := 0;
 MS.SaveToFile('C:\Stream.png'); сохраняем файл на диск
 // Image4.Picture.Bitmap.LoadFromStream(MS);
 // sMemo1.Lines.LoadFromStream(ms);
 MS.Free;
 sStatusBar1.SimpleText := 'Файл принят';
 end;
 end;
И тут проблема, файл в конце оказывается битым. Подскажите что тут не так. Где ошибка.




