با تشکر از توجه دوستان، روال برنامه رو توضیح میدم تا شاید در حل مشکل مفید باشه
در ابتدا روال OpenSocket برای یکبار اجرا میشود و سپس روال SendData عملیات ارسال رشته را انجام می دهد
type
TServerConnectionTH = class(TThread)
private
{ Private declarations }
FServerSocket: TBluetoothServerSocket;
FSocket: TBluetoothSocket;
FData: TBytes;
protected
procedure Execute; override;
public
{ Public declarations }
constructor Create(ACreateSuspended: Boolean);
destructor Destroy; override;
end;
------------------
TForm1 = class(TForm)
ComboBox1: TComboBox;
Bluetooth1: TBluetooth;
....
private
{ Private declarations }
zServerConnectionTH: TServerConnectionTH;
zSocket: TBluetoothSocket;
//--------------
procedure OpenSocket;
procedure SendData;
public
{ Public declarations }
end;
---------------------
procedure TForm1.OpenSocket;
begin
if ((zServerConnectionTH = nil) and
(Bluetooth1.ConnectionState = TBluetoothConnectionState.Connected)) then
begin
zServerConnectionTH := TServerConnectionTH.Create(True);
zServerConnectionTH.FServerSocket :=
Bluetooth1.CurrentAdapter.CreateServerSocket('Basi c Text Server', StringToGUID('{B62C4E8D-62CC-404B-BBBF-BF3E3BBB1378}'), False);
zServerConnectionTH.Start;
end;
end;
--------------------
procedure TForm1.SendData;
var
ToSend: TBytes;
zDevice: TBluetoothDevice;
begin
if (zSocket = nil) then
begin
zDevice := Bluetooth1.PairedDevices[ComboBox1.ItemIndex] as TBluetoothDevice;
zSocket := zDevice.CreateClientSocket('{B62C4E8D-62CC-404B-BBBF-BF3E3BBB1378}', False);
zSocket.Connect;
end;
ToSend := TEncoding.UTF8.GetBytes('test');
zSocket.SendData(ToSend);
end;