Recent

Author Topic: Synapse UDP connection  (Read 1283 times)

Jake012345

  • Sr. Member
  • ****
  • Posts: 270
  • Knowledge is the key
Synapse UDP connection
« on: June 11, 2020, 01:52:05 pm »
Hello!

I want to write a program that can 'synchronize' some data.
Here I tried to synchronize two TextEdit.Text but it not works.
(That's my first try with UDP)
Anybody knows what's the problem?

Code: Pascal  [Select][+][-]
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
  9.   laz_synapse, blcksock;
  10.  
  11. type
  12.  
  13.   { TForm1 }
  14.  
  15.   TForm1 = class(TForm)
  16.     ConnectButton: TButton;
  17.     HostButton: TButton;
  18.     IPEdit: TEdit;
  19.     PortEdit: TEdit;
  20.     TextEdit: TEdit;
  21.     Log: TMemo;
  22.     procedure ConnectButtonClick(Sender: TObject);
  23.     procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
  24.     procedure HostButtonClick(Sender: TObject);
  25.   private
  26.  
  27.   public
  28.   end;
  29.  
  30. type
  31.   TCustomThread = class(TThread)
  32.     Listener: TUDPBlockSocket;
  33.     Connection: TUDPBlockSocket;
  34.     Connected: boolean;
  35.     Received: string;
  36.     ForSend: string;
  37.   protected
  38.     procedure Execute; override;
  39.   public
  40.     constructor Create(CreateSuspended: boolean);
  41.     procedure DataIn;
  42.   end;
  43.  
  44. var
  45.   Form1: TForm1;
  46.  
  47. implementation
  48.  
  49. {$R *.lfm}
  50.  
  51. { TForm1 }
  52.  
  53. var
  54.   SynCronThread: TCustomThread;
  55.   mode: string;
  56.  
  57. constructor TCustomThread.Create(CreateSuspended: boolean);
  58. begin
  59.   inherited
  60.   Create(CreateSuspended);
  61.   FreeOnTerminate := True;
  62. end;
  63.  
  64. procedure TCustomThread.DataIn;
  65. begin
  66.   Form1.Log.Append(Received);
  67. end;
  68.  
  69. procedure TCustomThread.Execute;
  70. begin
  71.   if mode = 'Server' then
  72.   begin
  73.     Listener := TUDPBlockSocket.Create;
  74.     Listener.CreateSocket;
  75.     Listener.Bind(Form1.IPEdit.Text, Form1.PortEdit.Text);
  76.     repeat
  77.       Received := Listener.RecvString(10);
  78.       if Received <> '' then
  79.         ShowMessage(Received);
  80.       Synchronize(@DataIn);
  81.     until Terminated;
  82.     if Terminated then
  83.     begin
  84.       Listener.CloseSocket;
  85.       Listener.Free;
  86.     end;
  87.   end;
  88.  
  89.   if mode = 'Client' then
  90.   begin
  91.     repeat
  92.       Connection := TUDPBlockSocket.Create;
  93.       Connection.CreateSocket;
  94.       Connection.Connect(Form1.IPEdit.Text, Form1.PortEdit.Text);
  95.       ForSend := Form1.TextEdit.Text;
  96.       Connection.SendString(ForSend);
  97.       Connection.CloseSocket;
  98.       Connection.Free;
  99.     until Terminated;
  100.  
  101.   end;
  102. end;
  103.  
  104. procedure TForm1.HostButtonClick(Sender: TObject);
  105. begin
  106.   SynCronThread := TCustomThread.Create(True);
  107.   mode := 'Server';
  108.   SynCronThread.Start;
  109. end;
  110.  
  111. procedure TForm1.ConnectButtonClick(Sender: TObject);
  112. begin
  113.   SynCronThread := TCustomThread.Create(True);
  114.   mode := 'Client';
  115.   SynCronThread.Start;
  116. end;
  117.  
  118. procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
  119. begin
  120.   SynCronThread.Terminate;
  121. end;
  122.  
  123. end.
  124.  

rvk

  • Hero Member
  • *****
  • Posts: 6953
Re: Synapse UDP connection
« Reply #1 on: June 11, 2020, 01:57:36 pm »
Didn't you learn in the other topic that recvstring waits until CRLF is received?
So also add that to your SendString().

Jake012345

  • Sr. Member
  • ****
  • Posts: 270
  • Knowledge is the key
Re: Synapse UDP connection
« Reply #2 on: June 11, 2020, 02:07:39 pm »
That's working... Sure.....

Whyyyyy???????!!  >:( >:D

 

TinyPortal © 2005-2018