Необходимо наладить процесс обмена данными между мобильником и компьютером. Делаю через сокеты. Мидлет:
| Код | // ============== Блок отправки try { String str = new String("Какая-нибудь строка"); StringBuffer sb = new StringBuffer(); sb.append((char)0); // Команда для приёма текста sb.append((char)str.length()); // Длина текста sb.append(str); sb.append("\r\n"); // Конец передачи dos.write(str.getBytes()); } catch (IOException ex) { ex.printStackTrace(); } // ========================= // ============== Блок приёма while (true) { try { StringBuffer sb = new StringBuffer(); byte c = 0; while ((((c = dis.readByte()) != '\n') && (c != -1)) && !socketStop ) { sb.append((char)c); } String str = null; byte[] buffer = sb.toString().getBytes(); if (buffer[0] == 0) { // Приём текста byte count = (byte)buffer[1]; str = new String(buffer, 2, count); addtolist("read:"+str, null); } } catch (Exception iex) { iex.printStackTrace(); break; } } // =========================
|
Сервер на Delphi
| Код | procedure TSrvForm.DataAvailable(Sender: TObject; Error: Word); var Buffer : array of char; i : Byte; DataStr2 : TStringStream; i2 : Byte; Count2 : Integer; List2 : TList; begin with (sender as TWSocket) do begin try Receive(@i, 1); if i = 0 then // Приём текста begin Receive(@i, 1); SetLength(Buffer, i); Receive(@Buffer, i); // ===================== Готовим строку для клиента DataStr2 := TStringStream.Create(''); try i2 := 0; DataStr2.WriteBuffer(i2,1); i2 := Length(PChar(Buffer)); DataStr2.WriteBuffer(i2,1); DataStr2.WriteString(PChar(Buffer)); List2 := SocketList.LockList; try if List2.Count > 0 then begin for Count2 := 0 to List2.Count-1 do begin TWSocket(List2.Items[Count2]).SendStr(DataStr2.DataString+#13#10); // Рассылаем всем подключившимся end; end; finally SocketList.UnlockList; end; finally DataStr2.Free; end; // ========================================== end; finally ReceiveStr; end; end; end;
|
До компа русский текст доходит хорошо, а вот обратно кракозябры. Испробовал очень много способов, перерыл этот и другие форумы, про readUTF я вкурсе, но это мне не подойдёт, т.к. за строкой может идти ещё какая-нибудь команда, а в readUTF нет границ считывания байт. Так вот помогите пожалуйста решить эту проблему, либо посоветуйте другой метод обмена данными (фото, файлы, текст). |