Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Telefondan Telefona Bas Konuş Tarzı Chat Programı
#1
Server Tarafı:

unit ServerUnit1;

interface

uses
 System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
 FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Memo.Types,
 IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer, FMX.Media,
 FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, IdGlobal, IdSocketHandle,
 system.Generics.Collections, FMX.StdCtrls, FMX.Edit, FMX.Objects;

type
 TDataTransRec = Record
 Block : TBytes;
 PeerIp :String;
 IdData : Byte;
 Constructor Create (aData:TidBytes; Const aPeerIp : String);
 Function Info : String;
 Function Tostring : String;
 End;


 TVoiceserver = class(TForm)
   Memo1: TMemo;
   MediaPlayer1: TMediaPlayer;
   IdUDPServer1: TIdUDPServer;
   Panel1: TPanel;
   Image1: TImage;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
     const AData: TIdBytes; ABinding: TIdSocketHandle);
   procedure Image1Click(Sender: TObject);
 private
   { Private declarations }
 public
   liste : TList<TDataTransRec>;
   StartPos:Integer;
   Procedure DosyaKaydet(Const aStartpos : integer);
   Function strdizin:String;
 end;

var
 Voiceserver: TVoiceserver;

implementation

uses ioutils, Math;

{$R *.fmx}

procedure TVoiceserver.DosyaKaydet(const aStartpos: integer);
var
A:Integer;
F:String;
M:TMemoryStream;
begin
A := aStartpos+1;
F := strdizin+Liste[A].Tostring;
A := A + 1;
if (Liste[A].Tostring = 'StartData') and (Liste[A].IdData = 3) then
Begin
  M := TMemoryStream.Create;
  Repeat
    inc(A);
    if Liste[A].IdData = 0 then M.Write(Liste[A].Block, Length(Liste[A].Block));
  Until Liste[A].IdData = 4 ;
  M.Position := 0;
  M.SaveToFile(F);
  M.Free;
  Liste.Clear;
  MediaPlayer1.FileName := F;
  MediaPlayer1.Play;
End;
end;

procedure TVoiceserver.FormCreate(Sender: TObject);
begin
Liste :=  TList<TDataTransRec>.Create;
end;

procedure TVoiceserver.FormDestroy(Sender: TObject);
begin
FreeAndNil(Liste);
end;

procedure TVoiceserver.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
 const AData: TIdBytes; ABinding: TIdSocketHandle);
 var w:TDataTransRec;
 S: String;
begin
W := TDataTransRec.Create(AData, ABinding.PeerIp);
Liste.Add(W);
S := W.Info;
if W.IdData = 1 then StartPos := Liste.Count - 1;
if W.IdData = 4 then DosyaKaydet(StartPos);
if S <> '' then Memo1.Lines.Add(S);
end;

procedure TVoiceserver.Image1Click(Sender: TObject);
begin
 close;
end;


procedure WorkArrays(var aWorking: array of integer);
begin
 if High(aWorking) >= 0 then
   aWorking[0] := 1;
 if High(aWorking) >= 3 then
   aWorking[3] := 5;
end;


function TVoiceserver.strdizin: String;
begin
{$IFDEF ANDROID}
 Result := TPath.GetHomePath;
{$ELSE}
 Result := TPath.GetHomePath + TPath.DirectorySeparatorChar + 'Unitech';
 ForceDirectories(Result);
{$ENDIF}
 Result := Result + TPath.DirectorySeparatorChar;
end;

{ TDataTransRec }

constructor TDataTransRec.Create(aData: TidBytes; const aPeerIp: String);
var s:String;
begin
PeerIp := aPeerIp;
SetLength(Block, Length(aData));
System.Move(aData[0],Block[0],Length(aData));
S := ToString;
Iddata := 0;
if Pos ('StartFile', S) > 0 then IdData := 1;
if Pos ('StartData', S) > 0 then IdData := 3;
if Pos ('EndData', S) > 0 then IdData := 4;
end;

function TDataTransRec.Info: String;
begin
Result := ToString;
if (Pos ('StartFile', Result) > 0) or
   (Pos ('StartData', Result) > 0) or
   (Pos ('EndData', Result) > 0) then
   Result := PeerIp + '==>' + Result else
   Result := '';
end;

function TDataTransRec.Tostring: String;
var A : integer;
begin
 for a := 0 to Length(Block)-1 do Result := Result + Char(Block[A]);
end;

end.


Bu da Client Tarafı

unit Mobileunit;

interface

uses
 System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
 FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Ani,
 FMX.Objects, FMX.Media, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient,
 MobilePermissions.Model.Signature, MobilePermissions.Model.Dangerous,
 MobilePermissions.Model.Standard, MobilePermissions.Component, FMX.Layouts,
 FMX.Controls.Presentation, FMX.StdCtrls, FMX.Edit;

type
 TForm1 = class(TForm)
   Rectangle1: TRectangle;
   FloatAnimation1: TFloatAnimation;
   MediaPlayer1: TMediaPlayer;
   IdUDPClient1: TIdUDPClient;
   MobilePermissions1: TMobilePermissions;
   Layout1: TLayout;
   Panel1: TPanel;
   Edit1: TEdit;
   Button1: TButton;
   Edit2: TEdit;
   Image1: TImage;
   Panel2: TPanel;
   GridPanelLayout1: TGridPanelLayout;
   procedure Rectangle1Click(Sender: TObject);
   procedure FloatAnimation1Finish(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure Image1Click(Sender: TObject);
   procedure FormShow(Sender: TObject);
 private
   { Private declarations }
 public
   Micro : TAudioCaptureDevice;
   Index : Integer;
   Procedure StartRec;
   Function strdizin : String;
   Function FileName : String;
 end;

var
 Form1: TForm1;
 ipno :string;

implementation

uses IdGlobal, IOUtils,FMX.ZDeviceInfo;

{$R *.fmx}

function TForm1.FileName: String;
begin
 index := index + 1;
 Result := Format('Test%u.mp3', [index]);
 Result := strdizin + Result;
end;

procedure TForm1.FloatAnimation1Finish(Sender: TObject);
begin
 StartRec;
end;

procedure TForm1.FormShow(Sender: TObject);
var
 di: TZDeviceInfo;
begin
 di := TZDeviceInfo.Create;
 try
   edit1.Text := di.IPAddress;
 finally
   di.Free;
 end;
end;

procedure TForm1.Image1Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.Rectangle1Click(Sender: TObject);
begin
 if rectangle1.Fill.Color <> TAlphaColors.Red then
 Begin
   rectangle1.Fill.Color := TAlphaColors.Red;
   StartRec;
 End
 else rectangle1.Fill.Color := TAlphaColors.Chartreuse;
 Rectangle1.Repaint;
end;

procedure TForm1.StartRec;
var
M : TMemoryStream;
K : TidBytes;
B : TBytes;
A,L : Integer;
begin
if Micro.State = TCaptureDeviceState.Capturing then
Begin
 Micro.StopCapture;
 M := TMemoryStream.Create;
 if FileExists(Micro.FileName) then
 begin
   M.LoadFromFile(Micro.FileName);
   IdUDPClient1.Send('StartFile', IndyTextEncoding_Utf8);
   IdUDPClient1.Send(ExtractFileName(Micro.FileName), IndyTextEncoding_Utf8);
   IdUDPClient1.Send('StartData', IndyTextEncoding_Utf8);
   M.Position := 0;
   L := 80;
   SetLength(K,L);
   SetLength(B,L);
   While M.Read(B,L) > 0 do
   begin
     for A := 0 to L-1  do K[A]:=B[A];
     with IdUDPClient1 do SendBuffer(Host,Port,K);
     for A := 0 to L-1  do B[A]:=0;
   end;
   IdUDPClient1.Send('EndData', IndyTextEncoding_Utf8);
 end;
End;
if Rectangle1.Fill.Color <> TAlphaColors.Red  then Exit;
Micro.FileName := FileName;
Micro.StartCapture;
FloatAnimation1.Start;
end;

function TForm1.strdizin: String;
begin
{$IFDEF ANDROID}
 Result := TPath.GetHomePath;
{$ELSE}
 Result := TPath.GetHomePath + TPath.DirectorySeparatorChar + 'Unitech';
 ForceDirectories(Result);
{$ENDIF}
 Result := Result + TPath.DirectorySeparatorChar;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 IdUDPClient1.Host := edit2.text;
 IdUDPClient1.Port := 5556;
 MobilePermissions1.Dangerous.RecordAudio := True;
 MobilePermissions1.Apply;
 Micro := TCaptureDeviceManager.Current.DefaultAudioCaptureDevice;
 Rectangle1.Enabled := Assigned(Micro);
 Index := 0;
end;


end.


Bilgisayar server telefon client olarak çalıştığında dosya telefonda oluşturulup bilgisayara gönderiliyor. Hiçbir sorun yok. Fakat server telefon client'da başka bir telefon olduğunda dosya clientda oluşturuluyor. server olan telefonda Start File ve Start Data memo'ya ekleniyor. Ama dosya server telefonda oluşmuyor. Dosya boyutu 7.34 kb büyüklüğünden olduğunu sanmıyorum. Neyi atlıyorum?
Cevapla


Bu Konudaki Yorumlar
Telefondan Telefona Bas Konuş Tarzı Chat Programı - Yazar: Jakarta2 - 24-12-2021, Saat: 20:03

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Telefondan Arama yapmak barissagir 4 901 26-06-2025, Saat: 02:26
Son Yorum: barissagir
  Programı Bütün Platformlarda Kontrol Ettirmek Jakarta2 3 719 10-12-2024, Saat: 08:49
Son Yorum: RAD Coder
  telefondan telefona ses çaldırmak shooterman 14 3.392 27-11-2023, Saat: 14:18
Son Yorum: hi_selamlar
  Chat Uygulamaları emrahozten 10 2.885 11-09-2023, Saat: 14:46
Son Yorum: emrahozten
  Resim Çizme Programı quiet1day 0 725 24-07-2023, Saat: 11:35
Son Yorum: quiet1day



Konuyu Okuyanlar: 1 Ziyaretçi